* [PATCH] hwmon: (w83627ehf): fix broken driver init
@ 2011-11-05 0:54 Alexander Beregalov
2011-11-05 1:12 ` Guenter Roeck
2011-11-05 4:51 ` Guenter Roeck
0 siblings, 2 replies; 8+ messages in thread
From: Alexander Beregalov @ 2011-11-05 0:54 UTC (permalink / raw)
To: linux-kernel; +Cc: Alexander Beregalov, Jean Delvare, Guenter Roeck, stable
Commit 2265cef2 (hwmon: (w83627ehf) Properly report PECI and AMD-SI
sensor types) results in kernel panic if data->temp_label was not
initialized.
The problem was found with chip W83627DHG-P.
backtrace:
page_fault()
w83627ehf_probe() 0x8e2
w83627ehf_init_device:
1837: for (i = 0; i < 3; i++) {
const char *label = data->temp_label[data->temp_src[i]];
/* Digital source overrides analog type */
if (strncmp(label, "PECI", 4) == 0)
data->temp_type[i] = 6;
movzbl 128(%r14), %edx # data->temp_src, tmp737
movq 144(%r13), %rax # data_32->temp_label, data_32->temp_label
movq $.LC18, %rsi #,
movl %r14d, %r15d #, i
subl %r13d, %r15d # D.29277, i
0x928 movq (%rax,%rdx,8), %rcx #* data_32->temp_label, label
movl $4, %edx #,
movq %rcx, %rdi # label,
movq %rcx, -96(%rbp) #,
call strncmp #
page_fault() is called at 0x928 (0x8e2+0x46).
Add check if data->temp->label was set before use.
Cc: Jean Delvare <khali@linux-fr.org>
Cc: Guenter Roeck <guenter.roeck@ericsson.com>
Cc: stable@kernel.org
Signed-off-by: Alexander Beregalov <a.beregalov@gmail.com>
---
drivers/hwmon/w83627ehf.c | 17 +++++++++--------
1 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c
index 483cb26..70f1c73 100644
--- a/drivers/hwmon/w83627ehf.c
+++ b/drivers/hwmon/w83627ehf.c
@@ -1835,14 +1835,15 @@ static inline void __devinit w83627ehf_init_device(struct w83627ehf_data *data,
diode = 0x70;
}
for (i = 0; i < 3; i++) {
- const char *label = data->temp_label[data->temp_src[i]];
-
- /* Digital source overrides analog type */
- if (strncmp(label, "PECI", 4) == 0)
- data->temp_type[i] = 6;
- else if (strncmp(label, "AMD", 3) == 0)
- data->temp_type[i] = 5;
- else if ((tmp & (0x02 << i)))
+ if (data->temp_label) {
+ const char *label = data->temp_label[data->temp_src[i]];
+
+ /* Digital source overrides analog type */
+ if (strncmp(label, "PECI", 4) == 0)
+ data->temp_type[i] = 6;
+ else if (strncmp(label, "AMD", 3) == 0)
+ data->temp_type[i] = 5;
+ } else if ((tmp & (0x02 << i)))
data->temp_type[i] = (diode & (0x10 << i)) ? 1 : 3;
else
data->temp_type[i] = 4; /* thermistor */
--
1.7.7.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] hwmon: (w83627ehf): fix broken driver init
2011-11-05 0:54 [PATCH] hwmon: (w83627ehf): fix broken driver init Alexander Beregalov
@ 2011-11-05 1:12 ` Guenter Roeck
2011-11-05 4:51 ` Guenter Roeck
1 sibling, 0 replies; 8+ messages in thread
From: Guenter Roeck @ 2011-11-05 1:12 UTC (permalink / raw)
To: Alexander Beregalov
Cc: linux-kernel@vger.kernel.org, Jean Delvare, stable@kernel.org
On Fri, Nov 04, 2011 at 08:54:10PM -0400, Alexander Beregalov wrote:
> Commit 2265cef2 (hwmon: (w83627ehf) Properly report PECI and AMD-SI
> sensor types) results in kernel panic if data->temp_label was not
> initialized.
> The problem was found with chip W83627DHG-P.
>
> backtrace:
> page_fault()
> w83627ehf_probe() 0x8e2
>
> w83627ehf_init_device:
> 1837: for (i = 0; i < 3; i++) {
> const char *label = data->temp_label[data->temp_src[i]];
>
> /* Digital source overrides analog type */
> if (strncmp(label, "PECI", 4) == 0)
> data->temp_type[i] = 6;
>
> movzbl 128(%r14), %edx # data->temp_src, tmp737
> movq 144(%r13), %rax # data_32->temp_label, data_32->temp_label
> movq $.LC18, %rsi #,
> movl %r14d, %r15d #, i
> subl %r13d, %r15d # D.29277, i
> 0x928 movq (%rax,%rdx,8), %rcx #* data_32->temp_label, label
> movl $4, %edx #,
> movq %rcx, %rdi # label,
> movq %rcx, -96(%rbp) #,
> call strncmp #
>
> page_fault() is called at 0x928 (0x8e2+0x46).
>
Oops ...
> Add check if data->temp->label was set before use.
>
> Cc: Jean Delvare <khali@linux-fr.org>
> Cc: Guenter Roeck <guenter.roeck@ericsson.com>
> Cc: stable@kernel.org
> Signed-off-by: Alexander Beregalov <a.beregalov@gmail.com>
> ---
> drivers/hwmon/w83627ehf.c | 17 +++++++++--------
> 1 files changed, 9 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c
> index 483cb26..70f1c73 100644
> --- a/drivers/hwmon/w83627ehf.c
> +++ b/drivers/hwmon/w83627ehf.c
> @@ -1835,14 +1835,15 @@ static inline void __devinit w83627ehf_init_device(struct w83627ehf_data *data,
> diode = 0x70;
> }
> for (i = 0; i < 3; i++) {
> - const char *label = data->temp_label[data->temp_src[i]];
> -
> - /* Digital source overrides analog type */
> - if (strncmp(label, "PECI", 4) == 0)
> - data->temp_type[i] = 6;
> - else if (strncmp(label, "AMD", 3) == 0)
> - data->temp_type[i] = 5;
> - else if ((tmp & (0x02 << i)))
> + if (data->temp_label) {
> + const char *label = data->temp_label[data->temp_src[i]];
> +
> + /* Digital source overrides analog type */
> + if (strncmp(label, "PECI", 4) == 0)
> + data->temp_type[i] = 6;
> + else if (strncmp(label, "AMD", 3) == 0)
> + data->temp_type[i] = 5;
> + } else if ((tmp & (0x02 << i)))
This does not completely fix the problem, since there is now an else case which isn't
covered. Specifically, if there is a label, but the source is neither AMD nor PECI,
temp_type won't be set.
Guenter
> data->temp_type[i] = (diode & (0x10 << i)) ? 1 : 3;
> else
> data->temp_type[i] = 4; /* thermistor */
> --
> 1.7.7.2
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] hwmon: (w83627ehf): fix broken driver init
2011-11-05 0:54 [PATCH] hwmon: (w83627ehf): fix broken driver init Alexander Beregalov
2011-11-05 1:12 ` Guenter Roeck
@ 2011-11-05 4:51 ` Guenter Roeck
2011-11-05 8:13 ` Jean Delvare
2011-11-05 12:08 ` Alexander Beregalov
1 sibling, 2 replies; 8+ messages in thread
From: Guenter Roeck @ 2011-11-05 4:51 UTC (permalink / raw)
To: Alexander Beregalov
Cc: linux-kernel@vger.kernel.org, Jean Delvare, stable@kernel.org
On Fri, Nov 04, 2011 at 08:54:10PM -0400, Alexander Beregalov wrote:
> Commit 2265cef2 (hwmon: (w83627ehf) Properly report PECI and AMD-SI
> sensor types) results in kernel panic if data->temp_label was not
> initialized.
> The problem was found with chip W83627DHG-P.
>
> backtrace:
> page_fault()
> w83627ehf_probe() 0x8e2
>
> w83627ehf_init_device:
> 1837: for (i = 0; i < 3; i++) {
> const char *label = data->temp_label[data->temp_src[i]];
>
> /* Digital source overrides analog type */
> if (strncmp(label, "PECI", 4) == 0)
> data->temp_type[i] = 6;
>
> movzbl 128(%r14), %edx # data->temp_src, tmp737
> movq 144(%r13), %rax # data_32->temp_label, data_32->temp_label
> movq $.LC18, %rsi #,
> movl %r14d, %r15d #, i
> subl %r13d, %r15d # D.29277, i
> 0x928 movq (%rax,%rdx,8), %rcx #* data_32->temp_label, label
> movl $4, %edx #,
> movq %rcx, %rdi # label,
> movq %rcx, -96(%rbp) #,
> call strncmp #
>
> page_fault() is called at 0x928 (0x8e2+0x46).
>
> Add check if data->temp->label was set before use.
>
> Cc: Jean Delvare <khali@linux-fr.org>
> Cc: Guenter Roeck <guenter.roeck@ericsson.com>
> Cc: stable@kernel.org
> Signed-off-by: Alexander Beregalov <a.beregalov@gmail.com>
> ---
> drivers/hwmon/w83627ehf.c | 17 +++++++++--------
> 1 files changed, 9 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c
> index 483cb26..70f1c73 100644
> --- a/drivers/hwmon/w83627ehf.c
> +++ b/drivers/hwmon/w83627ehf.c
> @@ -1835,14 +1835,15 @@ static inline void __devinit w83627ehf_init_device(struct w83627ehf_data *data,
> diode = 0x70;
> }
> for (i = 0; i < 3; i++) {
> - const char *label = data->temp_label[data->temp_src[i]];
> -
> - /* Digital source overrides analog type */
> - if (strncmp(label, "PECI", 4) == 0)
> - data->temp_type[i] = 6;
> - else if (strncmp(label, "AMD", 3) == 0)
> - data->temp_type[i] = 5;
> - else if ((tmp & (0x02 << i)))
> + if (data->temp_label) {
> + const char *label = data->temp_label[data->temp_src[i]];
> +
> + /* Digital source overrides analog type */
> + if (strncmp(label, "PECI", 4) == 0)
> + data->temp_type[i] = 6;
> + else if (strncmp(label, "AMD", 3) == 0)
> + data->temp_type[i] = 5;
> + } else if ((tmp & (0x02 << i)))
Followup - something like
const char *label = NULL;
if (data->temp_label)
label = data->temp_label[data->temp_src[i]];
/* Digital source overrides analog type */
if (label && strncmp(label, "PECI", 4) == 0)
data->temp_type[i] = 6;
else if (label && strncmp(label, "AMD", 3) == 0)
data->temp_type[i] = 5;
else if ((tmp & (0x02 << i)))
should do it. I am open to better ideas...
Thanks,
Guenter
> data->temp_type[i] = (diode & (0x10 << i)) ? 1 : 3;
> else
> data->temp_type[i] = 4; /* thermistor */
> --
> 1.7.7.2
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] hwmon: (w83627ehf): fix broken driver init
2011-11-05 4:51 ` Guenter Roeck
@ 2011-11-05 8:13 ` Jean Delvare
2011-11-05 14:38 ` Guenter Roeck
2011-11-05 12:08 ` Alexander Beregalov
1 sibling, 1 reply; 8+ messages in thread
From: Jean Delvare @ 2011-11-05 8:13 UTC (permalink / raw)
To: Guenter Roeck; +Cc: Alexander Beregalov, linux-kernel, stable
Hi Alexander, Guenter,
On Fri, 4 Nov 2011 21:51:56 -0700, Guenter Roeck wrote:
> On Fri, Nov 04, 2011 at 08:54:10PM -0400, Alexander Beregalov wrote:
> > Commit 2265cef2 (hwmon: (w83627ehf) Properly report PECI and AMD-SI
> > sensor types) results in kernel panic if data->temp_label was not
> > initialized.
> > The problem was found with chip W83627DHG-P.
> >
> > backtrace:
> > page_fault()
> > w83627ehf_probe() 0x8e2
> >
> > w83627ehf_init_device:
> > 1837: for (i = 0; i < 3; i++) {
> > const char *label = data->temp_label[data->temp_src[i]];
> >
> > /* Digital source overrides analog type */
> > if (strncmp(label, "PECI", 4) == 0)
> > data->temp_type[i] = 6;
> >
> > movzbl 128(%r14), %edx # data->temp_src, tmp737
> > movq 144(%r13), %rax # data_32->temp_label, data_32->temp_label
> > movq $.LC18, %rsi #,
> > movl %r14d, %r15d #, i
> > subl %r13d, %r15d # D.29277, i
> > 0x928 movq (%rax,%rdx,8), %rcx #* data_32->temp_label, label
> > movl $4, %edx #,
> > movq %rcx, %rdi # label,
> > movq %rcx, -96(%rbp) #,
> > call strncmp #
> >
> > page_fault() is called at 0x928 (0x8e2+0x46).
Oops, my bad. I forgot that not all chips have temperature labels,
sorry :( Thanks for reporting so quickly!
> >
> > Add check if data->temp->label was set before use.
> >
> > Cc: Jean Delvare <khali@linux-fr.org>
> > Cc: Guenter Roeck <guenter.roeck@ericsson.com>
> > Cc: stable@kernel.org
> > Signed-off-by: Alexander Beregalov <a.beregalov@gmail.com>
> > ---
> > drivers/hwmon/w83627ehf.c | 17 +++++++++--------
> > 1 files changed, 9 insertions(+), 8 deletions(-)
> >
> > diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c
> > index 483cb26..70f1c73 100644
> > --- a/drivers/hwmon/w83627ehf.c
> > +++ b/drivers/hwmon/w83627ehf.c
> > @@ -1835,14 +1835,15 @@ static inline void __devinit w83627ehf_init_device(struct w83627ehf_data *data,
> > diode = 0x70;
> > }
> > for (i = 0; i < 3; i++) {
> > - const char *label = data->temp_label[data->temp_src[i]];
> > -
> > - /* Digital source overrides analog type */
> > - if (strncmp(label, "PECI", 4) == 0)
> > - data->temp_type[i] = 6;
> > - else if (strncmp(label, "AMD", 3) == 0)
> > - data->temp_type[i] = 5;
> > - else if ((tmp & (0x02 << i)))
> > + if (data->temp_label) {
> > + const char *label = data->temp_label[data->temp_src[i]];
> > +
> > + /* Digital source overrides analog type */
> > + if (strncmp(label, "PECI", 4) == 0)
> > + data->temp_type[i] = 6;
> > + else if (strncmp(label, "AMD", 3) == 0)
> > + data->temp_type[i] = 5;
> > + } else if ((tmp & (0x02 << i)))
>
> Followup - something like
> const char *label = NULL;
>
> if (data->temp_label)
> label = data->temp_label[data->temp_src[i]];
>
> /* Digital source overrides analog type */
> if (label && strncmp(label, "PECI", 4) == 0)
> data->temp_type[i] = 6;
> else if (label && strncmp(label, "AMD", 3) == 0)
> data->temp_type[i] = 5;
> else if ((tmp & (0x02 << i)))
>
> should do it. I am open to better ideas...
Looks good enough to me, this is one-time initialization code, it
doesn't need to be lightning fast. Will you send a formal patch, or do
you want me to do it?
--
Jean Delvare
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] hwmon: (w83627ehf): fix broken driver init
2011-11-05 4:51 ` Guenter Roeck
2011-11-05 8:13 ` Jean Delvare
@ 2011-11-05 12:08 ` Alexander Beregalov
1 sibling, 0 replies; 8+ messages in thread
From: Alexander Beregalov @ 2011-11-05 12:08 UTC (permalink / raw)
To: Guenter Roeck
Cc: linux-kernel@vger.kernel.org, Jean Delvare, stable@kernel.org
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=UTF-8, Size: 977 bytes --]
On 5 November 2011 08:51, Guenter Roeck <guenter.roeck@ericsson.com> wrote:
> Followup - something like
> Â Â Â Â Â Â Â Â const char *label = NULL;
>
> Â Â Â Â Â Â Â Â if (data->temp_label)
> Â Â Â Â Â Â Â Â Â Â Â Â label = data->temp_label[data->temp_src[i]];
>
> Â Â Â Â Â Â Â Â /* Digital source overrides analog type */
> Â Â Â Â Â Â Â Â if (label && strncmp(label, "PECI", 4) == 0)
> Â Â Â Â Â Â Â Â Â Â Â Â data->temp_type[i] = 6;
> Â Â Â Â Â Â Â Â else if (label && strncmp(label, "AMD", 3) == 0)
> Â Â Â Â Â Â Â Â Â Â Â Â data->temp_type[i] = 5;
> Â Â Â Â Â Â Â Â else if ((tmp & (0x02 << i)))
>
> should do it. I am open to better ideas...
Works for me, thanks. You may add my
Tested-by: Alexander Beregalov <a.beregalov@gmail.com>
ÿôèº{.nÇ+·®+%Ëÿ±éݶ\x17¥wÿº{.nÇ+·¥{±þG«éÿ{ayº\x1dÊÚë,j\a¢f£¢·hïêÿêçz_è®\x03(éÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?¨èÚ&£ø§~á¶iOæ¬z·vØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?I¥
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] hwmon: (w83627ehf): fix broken driver init
2011-11-05 8:13 ` Jean Delvare
@ 2011-11-05 14:38 ` Guenter Roeck
0 siblings, 0 replies; 8+ messages in thread
From: Guenter Roeck @ 2011-11-05 14:38 UTC (permalink / raw)
To: Jean Delvare
Cc: Alexander Beregalov, linux-kernel@vger.kernel.org,
stable@kernel.org
On Sat, Nov 05, 2011 at 04:13:51AM -0400, Jean Delvare wrote:
> Hi Alexander, Guenter,
>
> On Fri, 4 Nov 2011 21:51:56 -0700, Guenter Roeck wrote:
> > On Fri, Nov 04, 2011 at 08:54:10PM -0400, Alexander Beregalov wrote:
> > > Commit 2265cef2 (hwmon: (w83627ehf) Properly report PECI and AMD-SI
> > > sensor types) results in kernel panic if data->temp_label was not
> > > initialized.
> > > The problem was found with chip W83627DHG-P.
> > >
> > > backtrace:
> > > page_fault()
> > > w83627ehf_probe() 0x8e2
> > >
> > > w83627ehf_init_device:
> > > 1837: for (i = 0; i < 3; i++) {
> > > const char *label = data->temp_label[data->temp_src[i]];
> > >
> > > /* Digital source overrides analog type */
> > > if (strncmp(label, "PECI", 4) == 0)
> > > data->temp_type[i] = 6;
> > >
> > > movzbl 128(%r14), %edx # data->temp_src, tmp737
> > > movq 144(%r13), %rax # data_32->temp_label, data_32->temp_label
> > > movq $.LC18, %rsi #,
> > > movl %r14d, %r15d #, i
> > > subl %r13d, %r15d # D.29277, i
> > > 0x928 movq (%rax,%rdx,8), %rcx #* data_32->temp_label, label
> > > movl $4, %edx #,
> > > movq %rcx, %rdi # label,
> > > movq %rcx, -96(%rbp) #,
> > > call strncmp #
> > >
> > > page_fault() is called at 0x928 (0x8e2+0x46).
>
> Oops, my bad. I forgot that not all chips have temperature labels,
> sorry :( Thanks for reporting so quickly!
>
> > >
> > > Add check if data->temp->label was set before use.
> > >
> > > Cc: Jean Delvare <khali@linux-fr.org>
> > > Cc: Guenter Roeck <guenter.roeck@ericsson.com>
> > > Cc: stable@kernel.org
> > > Signed-off-by: Alexander Beregalov <a.beregalov@gmail.com>
> > > ---
> > > drivers/hwmon/w83627ehf.c | 17 +++++++++--------
> > > 1 files changed, 9 insertions(+), 8 deletions(-)
> > >
> > > diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c
> > > index 483cb26..70f1c73 100644
> > > --- a/drivers/hwmon/w83627ehf.c
> > > +++ b/drivers/hwmon/w83627ehf.c
> > > @@ -1835,14 +1835,15 @@ static inline void __devinit w83627ehf_init_device(struct w83627ehf_data *data,
> > > diode = 0x70;
> > > }
> > > for (i = 0; i < 3; i++) {
> > > - const char *label = data->temp_label[data->temp_src[i]];
> > > -
> > > - /* Digital source overrides analog type */
> > > - if (strncmp(label, "PECI", 4) == 0)
> > > - data->temp_type[i] = 6;
> > > - else if (strncmp(label, "AMD", 3) == 0)
> > > - data->temp_type[i] = 5;
> > > - else if ((tmp & (0x02 << i)))
> > > + if (data->temp_label) {
> > > + const char *label = data->temp_label[data->temp_src[i]];
> > > +
> > > + /* Digital source overrides analog type */
> > > + if (strncmp(label, "PECI", 4) == 0)
> > > + data->temp_type[i] = 6;
> > > + else if (strncmp(label, "AMD", 3) == 0)
> > > + data->temp_type[i] = 5;
> > > + } else if ((tmp & (0x02 << i)))
> >
> > Followup - something like
> > const char *label = NULL;
> >
> > if (data->temp_label)
> > label = data->temp_label[data->temp_src[i]];
> >
> > /* Digital source overrides analog type */
> > if (label && strncmp(label, "PECI", 4) == 0)
> > data->temp_type[i] = 6;
> > else if (label && strncmp(label, "AMD", 3) == 0)
> > data->temp_type[i] = 5;
> > else if ((tmp & (0x02 << i)))
> >
> > should do it. I am open to better ideas...
>
> Looks good enough to me, this is one-time initialization code, it
> doesn't need to be lightning fast. Will you send a formal patch, or do
> you want me to do it?
>
I'll send one in a minute.
Guenter
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH] hwmon: (w83627ehf) fix broken driver init
@ 2011-11-05 14:43 Guenter Roeck
2011-11-06 12:02 ` Jean Delvare
0 siblings, 1 reply; 8+ messages in thread
From: Guenter Roeck @ 2011-11-05 14:43 UTC (permalink / raw)
To: Jean Delvare
Cc: Alexander Beregalov, lm-sensors, linux-kernel, Guenter Roeck,
Jean Delvare, stable
Commit 2265cef2 (hwmon: (w83627ehf) Properly report PECI and AMD-SI
sensor types) results in kernel panic if data->temp_label was not
initialized.
The problem was found with chip W83627DHG-P.
Add check if data->temp->label was set before use.
Based on incomplete patch by Alexander Beregalov.
Reported-by: Alexander Beregalov <a.beregalov@gmail.com>
Tested-by: Alexander Beregalov <a.beregalov@gmail.com>
Cc: Jean Delvare <khali@linux-fr.org>
Cc: stable@kernel.org
Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
---
drivers/hwmon/w83627ehf.c | 9 ++++++---
1 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c
index 483cb26..93f5fc7 100644
--- a/drivers/hwmon/w83627ehf.c
+++ b/drivers/hwmon/w83627ehf.c
@@ -1835,12 +1835,15 @@ static inline void __devinit w83627ehf_init_device(struct w83627ehf_data *data,
diode = 0x70;
}
for (i = 0; i < 3; i++) {
- const char *label = data->temp_label[data->temp_src[i]];
+ const char *label = NULL;
+
+ if (data->temp_label)
+ label = data->temp_label[data->temp_src[i]];
/* Digital source overrides analog type */
- if (strncmp(label, "PECI", 4) == 0)
+ if (label && strncmp(label, "PECI", 4) == 0)
data->temp_type[i] = 6;
- else if (strncmp(label, "AMD", 3) == 0)
+ else if (label && strncmp(label, "AMD", 3) == 0)
data->temp_type[i] = 5;
else if ((tmp & (0x02 << i)))
data->temp_type[i] = (diode & (0x10 << i)) ? 1 : 3;
--
1.7.3.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] hwmon: (w83627ehf) fix broken driver init
2011-11-05 14:43 [PATCH] hwmon: (w83627ehf) " Guenter Roeck
@ 2011-11-06 12:02 ` Jean Delvare
0 siblings, 0 replies; 8+ messages in thread
From: Jean Delvare @ 2011-11-06 12:02 UTC (permalink / raw)
To: Guenter Roeck; +Cc: Alexander Beregalov, lm-sensors, linux-kernel, stable
On Sat, 5 Nov 2011 07:43:43 -0700, Guenter Roeck wrote:
> Commit 2265cef2 (hwmon: (w83627ehf) Properly report PECI and AMD-SI
> sensor types) results in kernel panic if data->temp_label was not
> initialized.
> The problem was found with chip W83627DHG-P.
>
> Add check if data->temp->label was set before use.
>
> Based on incomplete patch by Alexander Beregalov.
>
> Reported-by: Alexander Beregalov <a.beregalov@gmail.com>
> Tested-by: Alexander Beregalov <a.beregalov@gmail.com>
> Cc: Jean Delvare <khali@linux-fr.org>
> Cc: stable@kernel.org
> Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
> ---
> drivers/hwmon/w83627ehf.c | 9 ++++++---
> 1 files changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c
> index 483cb26..93f5fc7 100644
> --- a/drivers/hwmon/w83627ehf.c
> +++ b/drivers/hwmon/w83627ehf.c
> @@ -1835,12 +1835,15 @@ static inline void __devinit w83627ehf_init_device(struct w83627ehf_data *data,
> diode = 0x70;
> }
> for (i = 0; i < 3; i++) {
> - const char *label = data->temp_label[data->temp_src[i]];
> + const char *label = NULL;
> +
> + if (data->temp_label)
> + label = data->temp_label[data->temp_src[i]];
>
> /* Digital source overrides analog type */
> - if (strncmp(label, "PECI", 4) == 0)
> + if (label && strncmp(label, "PECI", 4) == 0)
> data->temp_type[i] = 6;
> - else if (strncmp(label, "AMD", 3) == 0)
> + else if (label && strncmp(label, "AMD", 3) == 0)
> data->temp_type[i] = 5;
> else if ((tmp & (0x02 << i)))
> data->temp_type[i] = (diode & (0x10 << i)) ? 1 : 3;
Applied, thanks.
--
Jean Delvare
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2011-11-06 12:03 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-11-05 0:54 [PATCH] hwmon: (w83627ehf): fix broken driver init Alexander Beregalov
2011-11-05 1:12 ` Guenter Roeck
2011-11-05 4:51 ` Guenter Roeck
2011-11-05 8:13 ` Jean Delvare
2011-11-05 14:38 ` Guenter Roeck
2011-11-05 12:08 ` Alexander Beregalov
-- strict thread matches above, loose matches on Subject: below --
2011-11-05 14:43 [PATCH] hwmon: (w83627ehf) " Guenter Roeck
2011-11-06 12:02 ` Jean Delvare
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox