From d86089d1dfe8565a3cf6f9d6e2fe96d29d6ab5f1 Mon Sep 17 00:00:00 2001 From: Stelian Pop Date: Thu, 1 Aug 2002 10:23:26 +0000 Subject: [PATCH] flock -> fcntl(F_SETLK). --- CHANGES | 14 +++++++++++++- THANKS | 3 ++- dump/itime.c | 16 +++++++++++++--- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/CHANGES b/CHANGES index ff87fc8..ccd47e0 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,16 @@ -$Id: CHANGES,v 1.191 2002/07/30 14:12:38 stelian Exp $ +$Id: CHANGES,v 1.192 2002/08/01 10:23:26 stelian Exp $ + +Changes between versions 0.4b31 and 0.4b32 (released ?????????????) +=================================================================== + +1. Changed dump to use fcntl(F_SETLK) style locking instead + of flock() when locking the dumpdates file. With the old + locking scheme, a local user having read rights on the + dumpdates file could be able to do a Denial of Service attack + on dump. In order to lock the dumpdates file with the new + scheme, the user would need to have write access on the file. + Thanks to Richard Johnson for + reporting the bug (originally a bugtraq post). Changes between versions 0.4b30 and 0.4b31 (released July 30, 2002) =================================================================== diff --git a/THANKS b/THANKS index 0feb5e5..bf912f3 100644 --- a/THANKS +++ b/THANKS @@ -1,4 +1,4 @@ -$Id: THANKS,v 1.64 2002/07/23 12:20:35 stelian Exp $ +$Id: THANKS,v 1.65 2002/08/01 10:23:26 stelian Exp $ Dump and restore were written by the people of the CSRG at the University of California, Berkeley. @@ -54,6 +54,7 @@ Jean-Paul van der Jagt jeanpaul@dutepp0.et.tudelft.nl Helmut Jarausch jarausch@igpm.rwth-aachen.de Eric Jergensen eric@dvns.com Jeff Johnson jbj@redhat.com +Richard Johnson Richard.Johnson3@ey.com Richard Jones rich@annexia.org Charles Karney karney@users.sourceforge.net Henry Katz hkatz@hkatz.dialup.access.net diff --git a/dump/itime.c b/dump/itime.c index 204fc58..aeaaec0 100644 --- a/dump/itime.c +++ b/dump/itime.c @@ -41,7 +41,7 @@ #ifndef lint static const char rcsid[] = - "$Id: itime.c,v 1.22 2002/01/25 15:08:59 stelian Exp $"; + "$Id: itime.c,v 1.23 2002/08/01 10:23:26 stelian Exp $"; #endif /* not lint */ #include @@ -56,6 +56,7 @@ static const char rcsid[] = #include #include #include +#include #ifdef __linux__ #ifdef HAVE_EXT2FS_EXT2_FS_H #include @@ -94,6 +95,7 @@ void initdumptimes(int createdumpdates) { FILE *df; + struct flock lock; if ((df = fopen(dumpdates, "r")) == NULL) { if (errno != ENOENT) { @@ -122,7 +124,11 @@ initdumptimes(int createdumpdates) msg("WARNING: no file `%s'\n", dumpdates); } if (df != NULL) { - (void) flock(fileno(df), LOCK_SH); + memset(&lock, 0, sizeof(lock)); + lock.l_type = F_RDLCK; + if (fcntl(fileno(df), F_SETLKW, &lock) < 0) + quit("cannot set read lock on %s: %s\n", + dumpdates, strerror(errno)); readdumptimes(df); (void) fclose(df); } @@ -200,13 +206,17 @@ putdumptime(void) struct dumpdates *dtwalk; int i; int fd; + struct flock lock; if(uflag == 0) return; if ((df = fopen(dumpdates, "r+")) == NULL) quit("cannot rewrite %s: %s\n", dumpdates, strerror(errno)); fd = fileno(df); - (void) flock(fd, LOCK_EX); + memset(&lock, 0, sizeof(lock)); + lock.l_type = F_WRLCK; + if (fcntl(fd, F_SETLKW, &lock) < 0) + quit("cannot set write lock on %s: %s\n", dumpdates, strerror(errno)); free((char *)ddatev); ddatev = 0; nddates = 0; -- 2.39.5