Re: [regression] linux318, linux41 - kernel stack is corrupted

From: Mike Galbraith
Date: Fri Apr 22 2016 - 06:16:56 EST


On Fri, 2016-04-22 at 17:23 +0900, Greg Kroah-Hartman wrote:
> On Fri, Apr 22, 2016 at 10:10:59AM +0200, Sebastian M. Bobrecki wrote:
> > W dniu 22.04.2016 o 09:55, Greg Kroah-Hartman pisze:
> > > On Fri, Apr 22, 2016 at 09:47:04AM +0200, Sebastian M. Bobrecki wrote:
> > > > Hi,
> > > >
> > > > I just hit the same with 4.1.22 on Gentoo. 4.1.21 are working fine.
> > > >
> > > > On 22.04.2016 at 08:46, Greg Kroah-Hartman wrote:
> > > > > ...
> > > > > You are going to have to be a bit more specific here...
> > > > > What is the oops message? How do you reproduce this? Does it also
> > > > > happen on 4.6-rc4?
> > > > >
> > > > > Can you run 'git bisect' to find the offending patch?
> > > > >
> > > > Greg have you seen screenshots linked by Philip?
> > > I saw no such screenshots in the email.
> > They are here: https://github.com/manjaro/packages-core/issues/36
>
> Looks like an acpi thermal patch got backported incorrectly, again, 'git
> bisect' is going to help out the best here.

That'll work, but requires repeatedly ignoring the big-fat-warning :)

Backport of 81ad4276b505e987dd8ebbdf63605f92cd172b52 failed to adjust
for intervening ->get_trip_temp() argument type change, thus causing
stack protector to panic.

drivers/thermal/thermal_core.c: In function âthermal_zone_device_registerâ:
drivers/thermal/thermal_core.c:1569:41: warning: passing argument 3 of
âtz->ops->get_trip_tempâ from incompatible pointer type [-Wincompatible-pointer-types]
if (tz->ops->get_trip_temp(tz, count, &trip_temp))
^
drivers/thermal/thermal_core.c:1569:41: note: expected âlong unsigned int *â
but argument is of type âint *â

CC: <stable@xxxxxxxxxxxxxxx> #3.18,#4.1
Signed-off-by: Mike Galbraith <umgwanakikbuti@xxxxxxxxx>
---
drivers/thermal/thermal_core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -1491,7 +1491,7 @@ struct thermal_zone_device *thermal_zone
{
struct thermal_zone_device *tz;
enum thermal_trip_type trip_type;
- int trip_temp;
+ unsigned long trip_temp;
int result;
int count;
int passive = 0;