mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
ieee1394: nodemgr: fix leak of struct csr1212_keyval
csr1212_keep_keyval(kv) in nodemgr_process_root_directory was unbalanced if ne->vendor_name_kv already exists. This happens for example if eth1394 or raw1394 modify the local config ROM and it is parsed again. As a bonus, the attempt to add the vendor_name_kv sysfs attribute when it already exists is now fixed for good. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
This commit is contained in:
parent
745647e7a2
commit
638d5bb816
1 changed files with 9 additions and 6 deletions
|
@ -1112,7 +1112,7 @@ static void nodemgr_process_root_directory(struct host_info *hi, struct node_ent
|
|||
{
|
||||
unsigned int ud_id = 0;
|
||||
struct csr1212_dentry *dentry;
|
||||
struct csr1212_keyval *kv;
|
||||
struct csr1212_keyval *kv, *vendor_name_kv = NULL;
|
||||
u8 last_key_id = 0;
|
||||
|
||||
ne->needs_probe = 0;
|
||||
|
@ -1139,8 +1139,8 @@ static void nodemgr_process_root_directory(struct host_info *hi, struct node_ent
|
|||
CSR1212_TEXTUAL_DESCRIPTOR_LEAF_WIDTH(kv) == 0 &&
|
||||
CSR1212_TEXTUAL_DESCRIPTOR_LEAF_CHAR_SET(kv) == 0 &&
|
||||
CSR1212_TEXTUAL_DESCRIPTOR_LEAF_LANGUAGE(kv) == 0) {
|
||||
ne->vendor_name_kv = kv;
|
||||
csr1212_keep_keyval(kv);
|
||||
vendor_name_kv = kv;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -1149,10 +1149,13 @@ static void nodemgr_process_root_directory(struct host_info *hi, struct node_ent
|
|||
}
|
||||
|
||||
if (ne->vendor_name_kv) {
|
||||
int error = device_create_file(&ne->device,
|
||||
&dev_attr_ne_vendor_name_kv);
|
||||
|
||||
if (error && error != -EEXIST)
|
||||
kv = ne->vendor_name_kv;
|
||||
ne->vendor_name_kv = vendor_name_kv;
|
||||
csr1212_release_keyval(kv);
|
||||
} else if (vendor_name_kv) {
|
||||
ne->vendor_name_kv = vendor_name_kv;
|
||||
if (device_create_file(&ne->device,
|
||||
&dev_attr_ne_vendor_name_kv) != 0)
|
||||
HPSB_ERR("Failed to add sysfs attribute");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue