From owner-freebsd-bugs@FreeBSD.ORG Wed Mar 26 22:00:01 2008 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E25C9106571F for ; Wed, 26 Mar 2008 22:00:01 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id C28438FC1D for ; Wed, 26 Mar 2008 22:00:01 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.2/8.14.2) with ESMTP id m2QM016P042782 for ; Wed, 26 Mar 2008 22:00:01 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.2/8.14.1/Submit) id m2QM01aT042781; Wed, 26 Mar 2008 22:00:01 GMT (envelope-from gnats) Resent-Date: Wed, 26 Mar 2008 22:00:01 GMT Resent-Message-Id: <200803262200.m2QM01aT042781@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Steven Kreuzer Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2F4DF106564A for ; Wed, 26 Mar 2008 21:51:47 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21]) by mx1.freebsd.org (Postfix) with ESMTP id 072BE8FC16 for ; Wed, 26 Mar 2008 21:51:47 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.14.2/8.14.2) with ESMTP id m2QLpWVV080808 for ; Wed, 26 Mar 2008 21:51:32 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.14.2/8.14.1/Submit) id m2QLpW8s080807; Wed, 26 Mar 2008 21:51:32 GMT (envelope-from nobody) Message-Id: <200803262151.m2QLpW8s080807@www.freebsd.org> Date: Wed, 26 Mar 2008 21:51:32 GMT From: Steven Kreuzer To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: bin/122137: Have crontab use snprintf instead of sprintf X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 26 Mar 2008 22:00:02 -0000 >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: