lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1188013483.2641.8.camel@lov.localdomain>
Date:	Sat, 25 Aug 2007 05:44:43 +0200
From:	Kay Sievers <kay.sievers@...y.org>
To:	Mathieu Desnoyers <mathieu.desnoyers@...ymtl.ca>
Cc:	Greg KH <greg@...ah.com>,
	Andrew Morton <akpm@...ux-foundation.org>,
	linux-kernel@...r.kernel.org
Subject: Re: kernel BUG with 2.6.23-rc3-mm1: skb_over_panic

On Fri, 2007-08-24 at 23:02 -0400, Mathieu Desnoyers wrote:
> * Greg KH (greg@...ah.com) wrote:
> > On Fri, Aug 24, 2007 at 05:44:50PM -0700, Andrew Morton wrote:
> > > On Fri, 24 Aug 2007 20:16:38 -0400
> > > Mathieu Desnoyers <mathieu.desnoyers@...ymtl.ca> wrote:
> > > 
> > > > * Andrew Morton (akpm@...ux-foundation.org) wrote:
> > > > > On Fri, 24 Aug 2007 18:47:07 -0400
> > > > > Mathieu Desnoyers <mathieu.desnoyers@...ymtl.ca> wrote:
> > > > > 
> > > > > > Hi Andrew,
> > > > > > 
> > > > > > I get the following BUG when booting 2.6.23-rc3-mm1 on i386. I wonder if
> > > > > > you would have some ideas about what is causing this problem. I'll start
> > > > > > bissecting it soon. I seems to be caused by an buggy skb_put call in
> > > > > > kobject_uevent_env.

> > > > > hm, don't know, sorry.  Kay fixed a few things in there, but iirc pretty
> > > > > much all of the fixes were in rc3-mm1 anyway.
> > > > > 
> > > > > I doubt if bisection will tell us a lot: it'll probably point at
> > > > > gregkh-driver-driver-core-change-add_uevent_var-to-use-a-struct.patch.
> > > > > 
> > > > > What we _would_ like to know is which sysfs file is being written to.  We
> > > > > used to have a debug patch to exactly address this problem but it got
> > > > > transferred into Greg's tree from whence it mysteriously disappeared.
> > > > > 
> > > > 
> > > > Ok, here it is:
> > > > 
> > > > filename :
> > > > 
> > > > /devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/rev
> > > 
> > > Bah.  I've never found a sane way of going from a sysfs pathname back to the
> > > code which implements that pathname :(
> > > 
> > > <greps the tree for '"rev"'>
> > > 
> > > <comes up with zilch>
> > 
> > It's a scsi file, as the above is a scsi device.  It's created in the
> > drivers/scsi/scsi_sysfs.c file.

> I think I am slowly getting there.. it looks like an off-by-one in
> lib/kobject_uevent.c: add_uevent_var
> 
> when testing the return value of vsnprintf
> 
> if (len + 1 >= (sizeof(env->buf) - env->buflen))
> 
> should be
> 
> if (len >= (sizeof(env->buf) - env->buflen))
> 
> And then the problem underneath is that the array is too short for some
> values.

That should be changed, yes. But we should not reach the end of the
buffer.

> Since the return value of add_uevent_var is always ignored (why?)

Because nobody added these checks, most of the callers check, some
don't. We should fix that step by step, sure.

> from its callers, fixing the off-by-one will just fail silently, which is
> almost worse.
> 
> I think we should find some better way of handling full static arrays.
> 
> And the bug is still there even if I fix these. So I'll continue my
> investigation.

Yeah, before these changes it was the environment buffer which got
corrupted, but seems nobody noticed it. Now it triggers BUG() if we run
into problems.

This needs a fix. It may be the reason for the too small buffer, you are
seeing.

Thanks,
Kay

--- a/drivers/firmware/dmi-id.c
+++ b/drivers/firmware/dmi-id.c
@@ -155,6 +155,7 @@ static int dmi_dev_uevent(struct device *dev, struct kobj_uevent_env *env)
 			   sizeof(env->buf) - env->buflen);
 	if (len >= (sizeof(env->buf) - env->buflen))
 		return -ENOMEM;
+	env->buflen += len;
 	return 0;
 }
 

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ