This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Ping Re: Fix bits/socket.h IOC* namespace issues (bug 21267)


On Thu, Mar 23, 2017 at 6:59 PM, Joseph Myers <joseph@codesourcery.com> wrote:
> Ping.  This patch
> <https://sourceware.org/ml/libc-alpha/2017-03/msg00400.html> is pending
> review.

I have no idea about the glibc side, but regarding your comment for the kernel
header:

> It's possible there should also be a kernel fix - it's not clear to me
> that IOC* belong in the uapi headers, and even if they do they might
> best be split out into another header to avoid getting defined by this
> particular path.  But since glibc needs to deal with existing kernel
> headers, it also seems appropriate to extend the existing workaround
> to these macros.

I wonder what the best fix is. Removing the five macros from
linux/ioctl.h risks regressions since they have been there since
ancient history (Linux-0.98.5), and there are at least two users,
one in kernel sources and one outside (we could still work
around that in the kernel):

/usr/include/linux/soundcard.h:#define SIOC_IN IOC_IN
/usr/include/linux/soundcard.h:#define SIOC_INOUT IOC_INOUT
/usr/include/linux/soundcard.h:#define SIOC_OUT IOC_OUT
/usr/include/xf86drm.h:#define DRM_IOC_READ            IOC_OUT
/usr/include/xf86drm.h:#define DRM_IOC_READWRITE       IOC_INOUT
/usr/include/xf86drm.h:#define DRM_IOC_WRITE           IOC_IN

There are many exported or user-space provided headers that include
linux/ioctl.h or asm/ioctl.h in order to get the _IOC/IOW/IOR/IOWR
macros:

linux/android/binder.h:#include <linux/ioctl.h>
linux/apm_bios.h:#include <linux/ioctl.h>
linux/aspeed-lpc-ctrl.h:#include <linux/ioctl.h>
linux/atmioc.h:#include <asm/ioctl.h>
linux/blkpg.h:#include <linux/ioctl.h>
linux/blkzoned.h:#include <linux/ioctl.h>
linux/bt-bmc.h:#include <linux/ioctl.h>
linux/btrfs.h:#include <linux/ioctl.h>
linux/capi.h:#include <linux/ioctl.h>
linux/cciss_ioctl.h:#include <linux/ioctl.h>
linux/cm4000_cs.h:#include <linux/ioctl.h>
linux/dn.h:#include <linux/ioctl.h>
linux/fd.h:#include <linux/ioctl.h>
linux/firewire-cdev.h:#include <linux/ioctl.h>
linux/fs.h:#include <linux/ioctl.h>
linux/genwqe/genwqe_card.h:#include <linux/ioctl.h>
linux/gigaset_dev.h:#include <linux/ioctl.h>
linux/gpio.h:#include <linux/ioctl.h>
linux/gsmmux.h:#include <linux/ioctl.h>
linux/hsi/cs-protocol.h:#include <linux/ioctl.h>
linux/i2o-dev.h:#include <linux/ioctl.h>
linux/iio/events.h:#include <linux/ioctl.h>
linux/ioctl.h:#include <asm/ioctl.h>
linux/isdn.h:#include <linux/ioctl.h>
linux/kfd_ioctl.h:#include <linux/ioctl.h>
linux/kvm.h:#include <linux/ioctl.h>
linux/lightnvm.h:#include <linux/ioctl.h>
linux/lirc.h:#include <linux/ioctl.h>
linux/matroxfb.h:#include <asm/ioctl.h>
linux/media.h:#include <linux/ioctl.h>
linux/mtio.h:#include <linux/ioctl.h>
linux/nilfs2_api.h:#include <linux/ioctl.h>
linux/nsfs.h:#include <linux/ioctl.h>
linux/nvram.h:#include <linux/ioctl.h>
linux/omapfb.h:#include <linux/ioctl.h>
linux/perf_event.h:#include <linux/ioctl.h>
linux/pmu.h:#include <linux/ioctl.h>
linux/pps.h:#include <linux/ioctl.h>
linux/ptp_clock.h:#include <linux/ioctl.h>
linux/radeonfb.h:#include <asm/ioctl.h>
linux/random.h:#include <linux/ioctl.h>
linux/rio_mport_cdev.h:#include <linux/ioctl.h>
linux/rpmsg.h:#include <linux/ioctl.h>
linux/serio.h:#include <linux/ioctl.h>
linux/soundcard.h:#include <linux/ioctl.h>
linux/sync_file.h:#include <linux/ioctl.h>
linux/timerfd.h:#include <linux/ioctl.h>
linux/usb/functionfs.h:#include <linux/ioctl.h>
linux/usb/gadgetfs.h:#include <linux/ioctl.h>
linux/uvcvideo.h:#include <linux/ioctl.h>
linux/v4l2-subdev.h:#include <linux/ioctl.h>
linux/vfio.h:#include <linux/ioctl.h>
linux/vhost.h:#include <linux/ioctl.h>
linux/videodev2.h:#include <linux/ioctl.h>
linux/videodev2.h.orig:#include <linux/ioctl.h>
linux/vtpm_proxy.h:#include <linux/ioctl.h>
linux/watchdog.h:#include <linux/ioctl.h>

*/asm/ioctls.h:#include <linux/ioctl.h>
cris/asm/sync_serial.h:#include <linux/ioctl.h>
mips/asm/sockios.h:#include <asm/ioctl.h>
misc/cxl.h:#include <linux/ioctl.h>
powerpc/asm/ps3fb.h:#include <linux/ioctl.h>
s390/asm/chsc.h:#include <linux/ioctl.h>
s390/asm/clp.h:#include <linux/ioctl.h>
s390/asm/dasd.h:#include <linux/ioctl.h>
s390/asm/pkey.h:#include <linux/ioctl.h>
s390/asm/qeth.h:#include <linux/ioctl.h>
s390/asm/zcrypt.h:#include <linux/ioctl.h>
sparc/asm/apc.h:#include <linux/ioctl.h>
sparc/asm/envctrl.h:#include <linux/ioctl.h>
sparc/asm/openpromio.h:#include <linux/ioctl.h>
tile/asm/hardwall.h:#include <linux/ioctl.h>
x86/asm/kvm.h:#include <linux/ioctl.h>
x86/asm/mce.h:#include <linux/ioctl.h>
x86/asm/msr.h:#include <linux/ioctl.h>
x86/asm/mtrr.h:#include <linux/ioctl.h>
xtensa/asm/sockios.h:#include <asm/ioctl.h>

btrfs/ioctl.h:#include <linux/ioctl.h>
libdrm/drm.h:#include <asm/ioctl.h>
drm/drm.h:#include <asm/ioctl.h>
rdma/ib_user_mad.h:#include <linux/ioctl.h>
rdma/rdma_user_ioctl.h:#include <linux/ioctl.h>
sound/firewire.h:#include <linux/ioctl.h>
video/sisfb.h:#include <asm/ioctl.h>
xen/sys/xenbus_dev.h:#include <linux/ioctl.h>

so any of them will also pull in IOC_IN/INOUT/OUT.  Is mips/asm/sockios.h
the only one in that list that i  problematic for glibc, or should they
all avoid the  macros if possible?

We can probably move everything other than the six
macros from asm/ioctl.h into a new header that is
included from both asm/ioctl.h and from any other
file that wants to avoid using asm/ioctl.h.

      Arnd


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]