ieee1394: nodemgr: fix leak of struct csr1212_keyval
PATCH 1/1 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 <[email protected]>
--- drivers/ieee1394/nodemgr.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)
drivers/ieee1394/nodemgr.c +9 -6
@@ -1113,7 +1113,7 @@ static void nodemgr_process_root_directo {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 ;
@@ -1140,8 +1140,8 @@ static void nodemgr_process_root_directo 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 ;
@@ -1150,10 +1150,13 @@ static void nodemgr_process_root_directo }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" ); } }
Signature · 3 lines
Stefan Richter -=====-=-=== =--= -==== http://arcgraph.de/sr/