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: <20120306055706.GQ23916@ZenIV.linux.org.uk>
Date:	Tue, 6 Mar 2012 05:57:06 +0000
From:	Al Viro <viro@...IV.linux.org.uk>
To:	Arve Hj?nnev?g <arve@...roid.com>
Cc:	Linus Torvalds <torvalds@...ux-foundation.org>,
	linux-kernel@...r.kernel.org, airlied@...ux.ie,
	carsteno@...ibm.com, steiner@....com
Subject: Re: [patches] VM-related fixes

On Mon, Mar 05, 2012 at 09:25:05PM -0800, Arve Hj?nnev?g wrote:
> > Sorry, no.
> > ? ? ? ? ? ? ? ?down_write(&mm->mmap_sem);
> > ? ? ? ? ? ? ? ?vma = proc->vma;
> > ? ? ? ? ? ? ? ?if (vma && mm != vma->vm_mm) {
> > does *not* do what you seem to describe; there's nothing to protect you
> > from proc->vma getting freed under you right between load from proc->vma
> > and check of vma->mm. ?->mmap_sem on the right mm would prevent that,
> > but this one doesn't guarantee anything. ?Get preempted after the second
> > line quoted above and by the time you get the timeslice back, you might
> > have had munmap() done by another thread, with vma freed, its memory
> > recycled, etc.
> >
> 
> OK, if the memory got freed and then re-used by someone who stored a
> value that matched a pointer to the mm struct that was just locked,
> this check will fail to catch it. I can check against a cached vm_mm
> member from mmap instead, assuming this will not change before
> ->close() is called. Does that sound reasonable, or is there a better
> way to check this?

Huh?  Sorry, I hadn't been able to parse that - what do you want to cache,
where and what do you want to check?  Again, at that point *(proc->vma)
may very well be random garbage, so looking at it would be pointless;
the value you had at ->mmap() time would be simply current->mm of mmap(2)
caller; if you want to check that it matches that of opener, fine,
but then why not do just that in ->mmap()?
--
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