* [PATCH] fix adm9240 oops @ 2005-08-25 20:56 Jonathan Corbet 2005-08-25 21:49 ` [PATCH] drivers/hwmon/*: kfree() correct pointers Alexey Dobriyan 0 siblings, 1 reply; 5+ messages in thread From: Jonathan Corbet @ 2005-08-25 20:56 UTC (permalink / raw) To: torvalds; +Cc: akpm, linux-kernel The adm9240 driver, in adm9240_detect(), allocates a structure. The error path attempts to kfree() a subfield of that structure, resulting in an oops (or slab corruption) if the hardware is not present. This one seems worth fixing for 2.6.13. jon Signed-off-by: Jonathan Corbet <corbet@lwn.net> --- 2.6.13-rc7/drivers/hwmon/adm9240.c.orig 2005-08-25 14:30:04.000000000 -0600 +++ 2.6.13-rc7/drivers/hwmon/adm9240.c 2005-08-25 14:30:26.000000000 -0600 @@ -616,7 +616,7 @@ static int adm9240_detect(struct i2c_ada return 0; exit_free: - kfree(new_client); + kfree(data); exit: return err; } ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH] drivers/hwmon/*: kfree() correct pointers 2005-08-25 20:56 [PATCH] fix adm9240 oops Jonathan Corbet @ 2005-08-25 21:49 ` Alexey Dobriyan 2005-08-25 22:02 ` Jean Delvare 0 siblings, 1 reply; 5+ messages in thread From: Alexey Dobriyan @ 2005-08-25 21:49 UTC (permalink / raw) To: Greg Kroah-Hartman, Jean Delvare Cc: torvalds, akpm, linux-kernel, lm-sensors, Jonathan Corbet The adm9240 driver, in adm9240_detect(), allocates a structure. The error path attempts to kfree() ->client field of it (second one), resulting in an oops (or slab corruption) if the hardware is not present. ->client field in adm1026, adm1031, smsc47b397 and smsc47m1 is the first in ${HWMON}_data structure, but fix them too. Signed-off-by: Jonathan Corbet <corbet@lwn.net Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com> --- drivers/hwmon/adm1026.c | 2 +- drivers/hwmon/adm1031.c | 2 +- drivers/hwmon/adm9240.c | 2 +- drivers/hwmon/smsc47b397.c | 2 +- drivers/hwmon/smsc47m1.c | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff -uprN linux-vanilla/drivers/hwmon/adm1026.c linux-hwmon/drivers/hwmon/adm1026.c --- linux-vanilla/drivers/hwmon/adm1026.c 2005-08-25 18:57:18.000000000 +0400 +++ linux-hwmon/drivers/hwmon/adm1026.c 2005-08-26 01:16:07.000000000 +0400 @@ -1691,7 +1691,7 @@ int adm1026_detect(struct i2c_adapter *a /* Error out and cleanup code */ exitfree: - kfree(new_client); + kfree(data); exit: return err; } diff -uprN linux-vanilla/drivers/hwmon/adm1031.c linux-hwmon/drivers/hwmon/adm1031.c --- linux-vanilla/drivers/hwmon/adm1031.c 2005-08-25 18:57:18.000000000 +0400 +++ linux-hwmon/drivers/hwmon/adm1031.c 2005-08-26 01:16:26.000000000 +0400 @@ -834,7 +834,7 @@ static int adm1031_detect(struct i2c_ada return 0; exit_free: - kfree(new_client); + kfree(data); exit: return err; } diff -uprN linux-vanilla/drivers/hwmon/adm9240.c linux-hwmon/drivers/hwmon/adm9240.c --- linux-vanilla/drivers/hwmon/adm9240.c 2005-08-25 18:57:18.000000000 +0400 +++ linux-hwmon/drivers/hwmon/adm9240.c 2005-08-26 01:16:40.000000000 +0400 @@ -616,7 +616,7 @@ static int adm9240_detect(struct i2c_ada return 0; exit_free: - kfree(new_client); + kfree(data); exit: return err; } diff -uprN linux-vanilla/drivers/hwmon/smsc47b397.c linux-hwmon/drivers/hwmon/smsc47b397.c --- linux-vanilla/drivers/hwmon/smsc47b397.c 2005-08-25 18:57:18.000000000 +0400 +++ linux-hwmon/drivers/hwmon/smsc47b397.c 2005-08-26 01:21:11.000000000 +0400 @@ -298,7 +298,7 @@ static int smsc47b397_detect(struct i2c_ return 0; error_free: - kfree(new_client); + kfree(data); error_release: release_region(addr, SMSC_EXTENT); return err; diff -uprN linux-vanilla/drivers/hwmon/smsc47m1.c linux-hwmon/drivers/hwmon/smsc47m1.c --- linux-vanilla/drivers/hwmon/smsc47m1.c 2005-08-25 18:57:18.000000000 +0400 +++ linux-hwmon/drivers/hwmon/smsc47m1.c 2005-08-26 01:21:28.000000000 +0400 @@ -495,7 +495,7 @@ static int smsc47m1_detect(struct i2c_ad return 0; error_free: - kfree(new_client); + kfree(data); error_release: release_region(address, SMSC_EXTENT); return err; ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] drivers/hwmon/*: kfree() correct pointers 2005-08-25 21:49 ` [PATCH] drivers/hwmon/*: kfree() correct pointers Alexey Dobriyan @ 2005-08-25 22:02 ` Jean Delvare 2005-08-25 23:53 ` Jonathan Corbet 0 siblings, 1 reply; 5+ messages in thread From: Jean Delvare @ 2005-08-25 22:02 UTC (permalink / raw) To: Alexey Dobriyan Cc: Greg Kroah-Hartman, torvalds, akpm, linux-kernel, lm-sensors, Jonathan Corbet Hi Alexey, > The adm9240 driver, in adm9240_detect(), allocates a structure. The > error path attempts to kfree() ->client field of it (second one), > resulting in an oops (or slab corruption) if the hardware is not > present. > > ->client field in adm1026, adm1031, smsc47b397 and smsc47m1 is the > first in ${HWMON}_data structure, but fix them too. Already fixed in Greg's i2c tree and -mm for quite some time now... http://www.kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/gregkh-02-i2c/i2c-hwmon-class-01.patch Thanks, -- Jean Delvare ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] drivers/hwmon/*: kfree() correct pointers 2005-08-25 22:02 ` Jean Delvare @ 2005-08-25 23:53 ` Jonathan Corbet 2005-08-26 7:32 ` Jean Delvare 0 siblings, 1 reply; 5+ messages in thread From: Jonathan Corbet @ 2005-08-25 23:53 UTC (permalink / raw) To: Jean Delvare Cc: Greg Kroah-Hartman, torvalds, akpm, linux-kernel, lm-sensors, Jonathan Corbet, Alexey Dobriyan > Already fixed in Greg's i2c tree and -mm for quite some time now... So it is. The comment says, however, that "the existing code works somewhat by accident." In the case of the 9240 driver, however, the existing code demonstrably does not work - it oopsed on me. The patch in Greg's tree looks fine (it's a straightforward fix, after all); I'd recommend that it be merged before 2.6.13. jon Jonathan Corbet Executive editor, LWN.net corbet@lwn.net ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] drivers/hwmon/*: kfree() correct pointers 2005-08-25 23:53 ` Jonathan Corbet @ 2005-08-26 7:32 ` Jean Delvare 0 siblings, 0 replies; 5+ messages in thread From: Jean Delvare @ 2005-08-26 7:32 UTC (permalink / raw) To: Jonathan Corbet Cc: Greg Kroah-Hartman, torvalds, akpm, linux-kernel, lm-sensors, Alexey Dobriyan Hi Jonathan, > > Already fixed in Greg's i2c tree and -mm for quite some time now... > > So it is. The comment says, however, that "the existing code works > somewhat by accident." In the case of the 9240 driver, however, the > existing code demonstrably does not work - it oopsed on me. I too did notice that the adm9240 case was worse than the four other ones back then, but when I tried to get it to crash, it never did. This is the reason why I did not push this patch upstream faster. I wonder why it now does oops on you. I also believe that this patch was somewhat misnamed. It is not related to the new hwmon class, but jut happened to change the same part of these five drivers. With a better name, the patch would most probably have been selected by Greg in the last batch of i2c patches to Linus. > The patch in Greg's tree looks fine (it's a straightforward fix, after > all); I wouldn't call it straightforward, but it certainly has been reviewed and tested well enough by now to be considered safe. > I'd recommend that it be merged before 2.6.13. Fine with me. Thanks, -- Jean Delvare ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2005-08-26 7:32 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2005-08-25 20:56 [PATCH] fix adm9240 oops Jonathan Corbet 2005-08-25 21:49 ` [PATCH] drivers/hwmon/*: kfree() correct pointers Alexey Dobriyan 2005-08-25 22:02 ` Jean Delvare 2005-08-25 23:53 ` Jonathan Corbet 2005-08-26 7:32 ` Jean Delvare
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox