From owner-freebsd-arch@FreeBSD.ORG Thu Nov 10 19:18:36 2011 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5C548106566B; Thu, 10 Nov 2011 19:18:36 +0000 (UTC) (envelope-from peter@wemm.org) Received: from mail-yx0-f182.google.com (mail-yx0-f182.google.com [209.85.213.182]) by mx1.freebsd.org (Postfix) with ESMTP id 07FCA8FC14; Thu, 10 Nov 2011 19:18:34 +0000 (UTC) Received: by yenl2 with SMTP id l2so1879492yen.13 for ; Thu, 10 Nov 2011 11:18:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=wemm.org; s=google; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; bh=gjKX+XBdp+xAUtIHVvYLw8+KNz2DzV8+l7aWPoRxrIg=; b=GuMoYY2tA3tflr+wfsAx7vnPHkaL9bKI5r755jWlC+pNFMVPLdDFbfkbKdKUohAV7N 5UOjuVHAa/pliH4IuYIERTC2w7iocKR5gdzPrEp6a7OW1XiyWcfHdwEP9cy3Z7nt7XWD 4H+nNCuoupfJf3/UvY2S74aE/ilAYnT0VkUkQ= MIME-Version: 1.0 Received: by 10.68.122.169 with SMTP id lt9mr16747591pbb.114.1320952713954; Thu, 10 Nov 2011 11:18:33 -0800 (PST) Received: by 10.68.50.226 with HTTP; Thu, 10 Nov 2011 11:18:33 -0800 (PST) In-Reply-To: References: Date: Thu, 10 Nov 2011 11:18:33 -0800 Message-ID: From: Peter Wemm To: Garrett Cooper Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Cc: Giovanni Trematerra , freebsd-arch@freebsd.org Subject: Re: deprecated TIOCSPGRP and TIOCGPGRP ioctl command X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 10 Nov 2011 19:18:36 -0000 On Wed, Nov 9, 2011 at 5:52 PM, Garrett Cooper wrote: > On Nov 9, 2011, at 4:49 PM, Peter Wemm wrote: > >> On Wed, Nov 9, 2011 at 3:39 PM, Giovanni Trematerra = wrote: >>> Are they deprecated enough to be removed, now? >>> FYI FIFO doesn't support them. >>> >>> -- >>> Gianni >>> >>> =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 >>> --- sys/kern/sys_pipe.c (revision 227233) >>> +++ sys/kern/sys_pipe.c (working copy) >>> @@ -1304,17 +1304,6 @@ pipe_ioctl(fp, cmd, data, active_cred, td) >>> =A0 =A0 =A0 =A0*(int *)data =3D fgetown(&mpipe->pipe_sigio); >>> =A0 =A0 =A0 =A0break; >>> >>> - =A0 /* This is deprecated, FIOSETOWN should be used instead. */ >>> - =A0 case TIOCSPGRP: >>> - =A0 =A0 =A0 PIPE_UNLOCK(mpipe); >>> - =A0 =A0 =A0 error =3D fsetown(-(*(int *)data), &mpipe->pipe_sigio); >>> - =A0 =A0 =A0 goto out_unlocked; >>> - >>> - =A0 /* This is deprecated, FIOGETOWN should be used instead. */ >>> - =A0 case TIOCGPGRP: >>> - =A0 =A0 =A0 *(int *)data =3D -fgetown(&mpipe->pipe_sigio); >>> - =A0 =A0 =A0 break; >>> - >>> =A0 =A0default: >>> =A0 =A0 =A0 =A0error =3D ENOTTY; >> >> Be very very careful with this. =A0It's part of the classic BSD job >> control API. =A0It would be wise to survey whether any ports shells use >> this. >> >> You might also want to consider things like this in libc: >> int >> tcsetpgrp(int fd, pid_t pgrp) >> { >> =A0 =A0 =A0 =A0int s; >> >> =A0 =A0 =A0 =A0s =3D pgrp; >> =A0 =A0 =A0 =A0return (_ioctl(fd, TIOCSPGRP, &s)); >> } >> Our own libc code uses this, albeit on an API intended to be used on a t= ty. >> >> The shell I'd be most concerned about is csh/tcsh in our tree. It has >> quite an #ifdef legacy layer and I couldn't convince myself it wasn't >> using this indirectly (or the tc* functions) on pipes. >> >> It might also be an idea to see if the linux compat layer can be >> switched over to using the newer API. > > Move to a compat library perhaps? > -Garrett It's not a compat library candidate. Summary of the issue: ioctl(fd, TIOCSPGRP, arg) can be used on sockets, pipes, ttys. But not fif= os. this is a classic BSD job control API. libc itself uses this internally on ttys. libc doesn't check that the function that does this is actually a tty, it could be being used by shells and pipes as an obscure side effect. The API is equivalent to FIOSETOWN etc and sockets and pipes use common code to implement both ioctl() calls. The proposed patch was to remove the TIOCSPGRP -> FIOSETOWN mapping for pipes only, to sync them with fifos. ttys and sockets would be unaffected. The implementation function still has to stay. Its not a large chunk of obsolete code that goes away, its just the mapping between the ioctl number and the implementation. --=20 Peter Wemm - peter@wemm.org; peter@FreeBSD.org; peter@yahoo-inc.com; KI6FJV "All of this is for nothing if we don't go to the stars" - JMS/B5 "If Java had true garbage collection, most programs would delete themselves upon execution." -- Robert Sewell