From owner-freebsd-hackers Mon Dec 2 4:47: 4 2002 Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 0CCA937B404 for ; Mon, 2 Dec 2002 04:47:01 -0800 (PST) Received: from straylight.ringlet.net (office.sbnd.net [217.75.140.130]) by mx1.FreeBSD.org (Postfix) with SMTP id 9E5E043EAF for ; Mon, 2 Dec 2002 04:46:56 -0800 (PST) (envelope-from roam@ringlet.net) Received: (qmail 20862 invoked by uid 1000); 2 Dec 2002 12:46:42 -0000 Date: Mon, 2 Dec 2002 14:46:42 +0200 From: Peter Pentchev To: Thomas Quinot Cc: hackers@FreeBSD.org, audit@FreeBSD.org Subject: Re: [CFR] diskpart(1) buffer overflow fix Message-ID: <20021202124641.GH372@straylight.oblivion.bg> Mail-Followup-To: Thomas Quinot , hackers@FreeBSD.org, audit@FreeBSD.org References: <20021202115809.GD372@straylight.oblivion.bg> <20021202122150.GE372@straylight.oblivion.bg> <20021202123752.GA62114@melusine.cuivre.fr.eu.org> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="fLj60tP2PZ34xyqD" Content-Disposition: inline In-Reply-To: <20021202123752.GA62114@melusine.cuivre.fr.eu.org> User-Agent: Mutt/1.5.1i Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG --fLj60tP2PZ34xyqD Content-Type: multipart/mixed; boundary="QxN5xOWGsmh5a4wb" Content-Disposition: inline --QxN5xOWGsmh5a4wb Content-Type: text/plain; charset=windows-1251 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Mon, Dec 02, 2002 at 01:37:52PM +0100, Thomas Quinot wrote: > Le 2002-12-02, Peter Pentchev ?crivait : >=20 > > > Attached are two patches: a trivial one which just fixes up two probl= ems > > > in diskpart's argument parsing, and a more complex one, which does it > > > "the right way" IMHO, using getopt(3). >=20 > The getopt-based version sounds better to me. >=20 > > + case 'd': > > + dflag++; > > + if (pflag) > > + usage(); > > + break; > > + =09 > > + case 'p': > > + if (dflag) > > + usage(); > > + pflag++; > > + break; >=20 > I'd remove both tests and replace them with a single > if (pflag && dflag) usage() > after all arguments have been processed. Ahhh; of course this would be better. Updated patch attached. G'luck, Peter --=20 Peter Pentchev roam@ringlet.net roam@FreeBSD.org PGP key: http://people.FreeBSD.org/~roam/roam.key.asc Key fingerprint FDBA FD79 C26F 3C51 C95E DF9E ED18 B68D 1619 4553 If there were no counterfactuals, this sentence would not have been paradox= ical. --QxN5xOWGsmh5a4wb Content-Type: text/plain; charset=windows-1251 Content-Disposition: attachment; filename="usr.sbin-diskpart.patch" Content-Transfer-Encoding: quoted-printable Index: src/usr.sbin/diskpart/diskpart.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /home/ncvs/src/usr.sbin/diskpart/Attic/diskpart.c,v retrieving revision 1.11.2.1 diff -u -r1.11.2.1 diskpart.c --- src/usr.sbin/diskpart/diskpart.c 7 Jan 2002 06:00:23 -0000 1.11.2.1 +++ src/usr.sbin/diskpart/diskpart.c 2 Dec 2002 12:45:27 -0000 @@ -55,6 +55,7 @@ #include #include #include +#include =20 #define for_now /* show all of `c' partition for disklabel */ #define NPARTITIONS 8 @@ -126,22 +127,29 @@ int threshhold, numcyls[NPARTITIONS], startcyl[NPARTITIONS]; int totsize =3D 0; char *lp, *tyname; + int ch; =20 - argc--, argv++; + while ((ch =3D getopt(argc, argv, "dps:")) !=3D EOF) + switch (ch) { + case 'd': + dflag++; + break; + =09 + case 'p': + pflag++; + break; + + case 's': + totsize =3D atoi(optarg); + break; + } + argc -=3D optind; + argv +=3D optind; + + if (dflag && pflag) + usage(); if (argc < 1) usage(); - if (argc > 0 && strcmp(*argv, "-p") =3D=3D 0) { - pflag++; - argc--, argv++; - } - if (argc > 0 && strcmp(*argv, "-d") =3D=3D 0) { - dflag++; - argc--, argv++; - } - if (argc > 1 && strcmp(*argv, "-s") =3D=3D 0) { - totsize =3D atoi(argv[1]); - argc +=3D 2, argv +=3D 2; - } dp =3D getdiskbyname(*argv); if (dp =3D=3D NULL) { if (isatty(0)) --QxN5xOWGsmh5a4wb-- --fLj60tP2PZ34xyqD Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (FreeBSD) iD8DBQE961Yx7Ri2jRYZRVMRAlB6AJsGIHbaIiOpb/+1kkCszSGzKsJjeQCfZvFa HT9yhe6vNIDvwpvqgPYmsSk= =M70Q -----END PGP SIGNATURE----- --fLj60tP2PZ34xyqD-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message