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] [day] [month] [year] [list]
Message-ID: <20080416194709.GA4762@martell.zuzino.mipt.ru>
Date:	Wed, 16 Apr 2008 23:47:09 +0400
From:	Alexey Dobriyan <adobriyan@...il.com>
To:	Al Viro <viro@...IV.linux.org.uk>
Cc:	Joakim Tjernlund <joakim.tjernlund@...nsmode.se>,
	linux-kernel@...r.kernel.org, ebiederm@...ssion.com
Subject: Re: Current git tree broke busybox start-stop-daemon

On Wed, Apr 16, 2008 at 08:34:17PM +0100, Al Viro wrote:
> On Wed, Apr 16, 2008 at 11:00:57PM +0400, Alexey Dobriyan wrote:
> > On Wed, Apr 16, 2008 at 07:25:02PM +0200, Joakim Tjernlund wrote:
> > > open("/proc/1/stat", O_RDONLY|O_LARGEFILE) = 4
> > > _llseek(4, 0, 0xbfb94898, SEEK_END)     = -1 EINVAL (Invalid argument)
> > 
> > > So it appears that lseek is no longer allowed for /proc/1/stat
> > > Bug or feature?
> > > start-stop-daemon works fine in 2.6.23
> > 
> > That's what happens when switching ->llseek method from NULL
> > (effectively, default_llseek), to seq_lseek (which rejects SEEK_END).
> > 
> > commit be614086a4aff163d5aa0dc160638d1193b59cde
> > commit ee992744ea53db0a90c986fd0a70fbbf91e7f8bd
> > 
> > Al, do you remember why SEEK_END was omitted back then?
> 
> Because there's no sane way to implement it?

Ugly ->index games, sigh...

> Note that original cheerfully
> did nothing, since it had zero ->i_size for that file.  Which makes program
> in question very odd - what behaviour does it rely upon?

Busybox just wants to estimate size of a file. And it knows about
zero-length /proc/*/stat .

libbb/read.c:

void *xmalloc_open_read_close(const char *filename, size_t *sizep)
{
	char *buf;
	size_t size = sizep ? *sizep : INT_MAX;
	int fd;
	off_t len;

	fd = xopen(filename, O_RDONLY);
	/* /proc/N/stat files report len 0 here */
	/* In order to make such files readable, we add small const */
	len = xlseek(fd, 0, SEEK_END) | 0x3ff; /* + up to 1k */
		...

--
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