Linux-man Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH glibc] Linux: Include <linux/sockios.h> in <bits/socket.h> under __USE_MISC
@ 2019-07-22 11:31 Florian Weimer
  2019-07-22 11:34 ` Arnd Bergmann
  0 siblings, 1 reply; 5+ messages in thread
From: Florian Weimer @ 2019-07-22 11:31 UTC (permalink / raw)
  To: libc-alpha, Sergei Trofimovich
  Cc: netdev, linux-kernel, Arnd Bergmann, David S. Miller,
	mtk.manpages, linux-man

Historically, <asm/socket.h> (which is included from <bits/socket.h>)
provided ioctl operations for sockets.  User code accessed them
through <sys/socket.h>.  The kernel UAPI headers have removed these
definitions in favor of <linux/sockios.h>.  This commit makes them
available via <sys/socket.h> again.

[[[
This is related to this thread:

From: Sergei Trofimovich <slyfox@gentoo.org>
Subject: linux-headers-5.2 and proper use of SIOCGSTAMP
To: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, libc-alpha@sourceware.org
Cc: Arnd Bergmann <arnd@arndb.de>, "David S. Miller" <davem@davemloft.net>,
 mtk.manpages@gmail.com, linux-man@vger.kernel.org
Date: Sat, 20 Jul 2019 17:48:44 +0100 (1 day, 18 hours, 40 minutes ago)
Message-ID: <20190720174844.4b989d34@sf>

I have tried to verify this against our 3.10 kernel headers and the 5.2
headers, and I do not see any failures in glibc itself (the latter with
build-many-glibcs.py).  Impact on application code is unclear at this
point, of course.

This patch depends on the earlier Linux 5.2 compatibility patch which
introduced <bits/socket-constants.h>.
]]]

2019-07-22  Florian Weimer  <fweimer@redhat.com>

	* sysdeps/unix/sysv/linux/bits/socket.h [__USE_MISC]: Include
	<linux/sockios.h>.

diff --git a/sysdeps/unix/sysv/linux/bits/socket.h b/sysdeps/unix/sysv/linux/bits/socket.h
index 082f8b9031..ff5b705f41 100644
--- a/sysdeps/unix/sysv/linux/bits/socket.h
+++ b/sysdeps/unix/sysv/linux/bits/socket.h
@@ -352,6 +352,7 @@ struct ucred
 #ifdef __USE_MISC
 # include <bits/types/time_t.h>
 # include <asm/socket.h>
+# include <linux/sockios.h>
 #else
 # define SO_DEBUG 1
 # include <bits/socket-constants.h>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH glibc] Linux: Include <linux/sockios.h> in <bits/socket.h> under __USE_MISC
  2019-07-22 11:31 [PATCH glibc] Linux: Include <linux/sockios.h> in <bits/socket.h> under __USE_MISC Florian Weimer
@ 2019-07-22 11:34 ` Arnd Bergmann
  2019-07-22 13:41   ` Szabolcs Nagy
  0 siblings, 1 reply; 5+ messages in thread
From: Arnd Bergmann @ 2019-07-22 11:34 UTC (permalink / raw)
  To: Florian Weimer
  Cc: GNU C Library, Sergei Trofimovich, Networking,
	Linux Kernel Mailing List, David S. Miller, Michael Kerrisk,
	linux-man

On Mon, Jul 22, 2019 at 1:31 PM Florian Weimer <fweimer@redhat.com> wrote:
>
> Historically, <asm/socket.h> (which is included from <bits/socket.h>)
> provided ioctl operations for sockets.  User code accessed them
> through <sys/socket.h>.  The kernel UAPI headers have removed these
> definitions in favor of <linux/sockios.h>.  This commit makes them
> available via <sys/socket.h> again.

Looks good to me.

I wonder if we should still do these two changes in the kernel:

- include asm/socket.h from linux/socket.h for consistency
- move the defines that got moved from asm/sockios.h to linux/sockios.h
  back to the previous location to help anyone who is user
  newer kernel headers with older glibc headers.

      Arnd

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH glibc] Linux: Include <linux/sockios.h> in <bits/socket.h> under __USE_MISC
  2019-07-22 11:34 ` Arnd Bergmann
@ 2019-07-22 13:41   ` Szabolcs Nagy
  2019-07-22 13:44     ` Florian Weimer
  0 siblings, 1 reply; 5+ messages in thread
From: Szabolcs Nagy @ 2019-07-22 13:41 UTC (permalink / raw)
  To: Arnd Bergmann, Florian Weimer
  Cc: nd, GNU C Library, Sergei Trofimovich, Networking,
	Linux Kernel Mailing List, David S. Miller, Michael Kerrisk,
	linux-man

On 22/07/2019 12:34, Arnd Bergmann wrote:
> On Mon, Jul 22, 2019 at 1:31 PM Florian Weimer <fweimer@redhat.com> wrote:
>>
>> Historically, <asm/socket.h> (which is included from <bits/socket.h>)
>> provided ioctl operations for sockets.  User code accessed them
>> through <sys/socket.h>.  The kernel UAPI headers have removed these
>> definitions in favor of <linux/sockios.h>.  This commit makes them
>> available via <sys/socket.h> again.
> 
> Looks good to me.
> 
> I wonder if we should still do these two changes in the kernel:
> 
> - include asm/socket.h from linux/socket.h for consistency
> - move the defines that got moved from asm/sockios.h to linux/sockios.h
>   back to the previous location to help anyone who is user
>   newer kernel headers with older glibc headers.

does user code actually expect these in sys/socket.h
or in asm/socket.h ?

man 7 socket
mentions SIOCGSTAMP but does not say the header.

man 2 ioctl_list
specifies include/asm-i386/socket.h as the location.

if user code tends to directly include asm/socket.h
then i think it's better to undo the kernel header
change than to put things in sys/socket.h.

(note: in musl these ioctl macros are in sys/ioctl.h
which is not a posix header so namespace rules are
less strict than for sys/socket.h and users tend to
include it for ioctl())


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH glibc] Linux: Include <linux/sockios.h> in <bits/socket.h> under __USE_MISC
  2019-07-22 13:41   ` Szabolcs Nagy
@ 2019-07-22 13:44     ` Florian Weimer
  2019-07-22 13:47       ` Szabolcs Nagy
  0 siblings, 1 reply; 5+ messages in thread
From: Florian Weimer @ 2019-07-22 13:44 UTC (permalink / raw)
  To: Szabolcs Nagy
  Cc: Arnd Bergmann, nd, GNU C Library, Sergei Trofimovich, Networking,
	Linux Kernel Mailing List, David S. Miller, Michael Kerrisk,
	linux-man

* Szabolcs Nagy:

> (note: in musl these ioctl macros are in sys/ioctl.h
> which is not a posix header so namespace rules are
> less strict than for sys/socket.h and users tend to
> include it for ioctl())

<sys/ioctl.h> can be confusing because some of the constants may depend
on types that aren't declared by including the header.  This makes their
macros unusable.  Defining ioctl constants in headers which also provide
the matching types avoids that problem at least, also it can introduce
namespace issues.

Thanks,
Florian

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH glibc] Linux: Include <linux/sockios.h> in <bits/socket.h> under __USE_MISC
  2019-07-22 13:44     ` Florian Weimer
@ 2019-07-22 13:47       ` Szabolcs Nagy
  0 siblings, 0 replies; 5+ messages in thread
From: Szabolcs Nagy @ 2019-07-22 13:47 UTC (permalink / raw)
  To: Florian Weimer
  Cc: nd, Arnd Bergmann, GNU C Library, Sergei Trofimovich, Networking,
	Linux Kernel Mailing List, David S. Miller, Michael Kerrisk,
	linux-man

On 22/07/2019 14:44, Florian Weimer wrote:
> * Szabolcs Nagy:
> 
>> (note: in musl these ioctl macros are in sys/ioctl.h
>> which is not a posix header so namespace rules are
>> less strict than for sys/socket.h and users tend to
>> include it for ioctl())
> 
> <sys/ioctl.h> can be confusing because some of the constants may depend
> on types that aren't declared by including the header.  This makes their
> macros unusable.  Defining ioctl constants in headers which also provide
> the matching types avoids that problem at least, also it can introduce
> namespace issues.

yeah, the way we deal with that is we hard code the numbers
since the size of struct is abi, they cannot change.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, back to index

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-22 11:31 [PATCH glibc] Linux: Include <linux/sockios.h> in <bits/socket.h> under __USE_MISC Florian Weimer
2019-07-22 11:34 ` Arnd Bergmann
2019-07-22 13:41   ` Szabolcs Nagy
2019-07-22 13:44     ` Florian Weimer
2019-07-22 13:47       ` Szabolcs Nagy

Linux-man Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-man/0 linux-man/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-man linux-man/ https://lore.kernel.org/linux-man \
		linux-man@vger.kernel.org linux-man@archiver.kernel.org
	public-inbox-index linux-man


Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-man


AGPL code for this site: git clone https://public-inbox.org/ public-inbox