Date: Wed, 26 Mar 2008 21:51:32 GMT From: Steven Kreuzer <skreuzer@exit2shell.com> To: freebsd-gnats-submit@FreeBSD.org Subject: bin/122137: Have crontab use snprintf instead of sprintf Message-ID: <200803262151.m2QLpW8s080807@www.freebsd.org> Resent-Message-ID: <200803262200.m2QM01aT042781@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 122137 >Category: bin >Synopsis: Have crontab use snprintf instead of sprintf >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: update >Submitter-Id: current-users >Arrival-Date: Wed Mar 26 22:00:01 UTC 2008 >Closed-Date: >Last-Modified: >Originator: Steven Kreuzer >Release: 7.0-RELEASE >Organization: >Environment: FreeBSD 7.0-RELEASE FreeBSD 7.0-RELEASE #0: Tue Feb 19 20:21:39 EST 2008 root@:/usr/obj/usr/src/sys/GENERIC i386 >Description: since crontab runs as suid, it makes sense to replace all instances of sprintf with snprintf. I suppose you can never be too paranoid >How-To-Repeat: >Fix: Patch attached with submission follows: Index: crontab.c =================================================================== RCS file: /usr/share/cvs/freebsd/src/usr.sbin/cron/crontab/crontab.c,v retrieving revision 1.25 diff -u -r1.25 crontab.c --- crontab.c 7 Nov 2007 10:53:34 -0000 1.25 +++ crontab.c 26 Mar 2008 02:22:07 -0000 @@ -261,7 +261,7 @@ FILE *f; log_it(RealUser, Pid, "LIST", User); - (void) sprintf(n, CRON_TAB(User)); + (void) snprintf(n, sizeof(n), CRON_TAB(User)); if (!(f = fopen(n, "r"))) { if (errno == ENOENT) errx(ERROR_EXIT, "no crontab for %s", User); @@ -291,7 +291,7 @@ } log_it(RealUser, Pid, "DELETE", User); - (void) sprintf(n, CRON_TAB(User)); + (void) snprintf(n, sizeof(n), CRON_TAB(User)); if (unlink(n)) { if (errno == ENOENT) errx(ERROR_EXIT, "no crontab for %s", User); @@ -325,7 +325,7 @@ char new_md5[MD5_SIZE]; log_it(RealUser, Pid, "BEGIN EDIT", User); - (void) sprintf(n, CRON_TAB(User)); + (void) snprintf(n, sizeof(n), CRON_TAB(User)); if (!(f = fopen(n, "r"))) { if (errno != ENOENT) err(ERROR_EXIT, "%s", n); @@ -335,7 +335,7 @@ } um = umask(077); - (void) sprintf(Filename, "/tmp/crontab.XXXXXXXXXX"); + (void) snprintf(Filename, sizeof(Filename), "/tmp/crontab.XXXXXXXXXX"); if ((t = mkstemp(Filename)) == -1) { warn("%s", Filename); (void) umask(um); @@ -502,8 +502,8 @@ return (-2); } - (void) sprintf(n, "tmp.%d", Pid); - (void) sprintf(tn, CRON_TAB(n)); + (void) snprintf(n, sizeof(n), "tmp.%d", Pid); + (void) snprintf(tn, sizeof(n), CRON_TAB(n)); if (!(tmp = fopen(tn, "w+"))) { warn("%s", tn); return (-2); @@ -590,7 +590,7 @@ return (-2); } - (void) sprintf(n, CRON_TAB(User)); + (void) snprintf(n, sizeof(n), CRON_TAB(User)); if (rename(tn, n)) { warn("error renaming %s to %s", tn, n); unlink(tn); >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200803262151.m2QLpW8s080807>