Re: HEADS UP: KBI breakage for Ethernet modules



On Tue, May 29, 2007 at 09:18:39AM -0600, Scott Long wrote:
Yar Tikhiy wrote:
On Sun, May 27, 2007 at 03:51:29PM +0400, Yar Tikhiy wrote:
As discussed earlier on -net, I'd like to commit the following
patch. It will bring ether_ioctl() into accord with ioctl() WRT
the type of the command argument. In our ioctl(), command became
an u_long ages ago, but ether_ioctl() has never been fixed. With
int and u_long being of different widths on 64-bit arch'es, the
discrepancy can get us in trouble sooner or later.

In fact, ioctl command coding is very unlikely to change, so it
will continue to fit in 32 bits. OTOH, the C compiler should be
uneasy about squeezing u_long into int when ether_ioctl() is called
from an if_ioctl handler, so this patch will be a little step on
the way to a warning-free kernel.

This change will inevitably break the kernel interface to network
modules, so all of them will need rebuilding.

I received several positive replies and no negative ones, so the
change has just been committed. In fact, it breaks KBI on 64-bit
platforms only. (Thanks to Ruslan Ermilov for reminding me about
that.) Many thanks to those folks who encouraged the change.

Now all Ethernet-related kernel modules need to be rebuilt on 64-bit
platforms. The conventional "make buildkernel" procedure will take
care of stock modules, so only 3rd-party modules need some attention.


How does this affect 32-bit compatibility on amd64?

It shouldn't at all. The ether_ioctl() function is to be called
by Ethernet drivers only, and they get the ioctl command as u_long
via their ifnet.if_ioctl handlers. I guess that 32-bit compatibility
is provided by an upper layer, such as the socket layer.

--
Yar
_______________________________________________
freebsd-current@xxxxxxxxxxx mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscribe@xxxxxxxxxxx"



Relevant Pages

  • Re: [announce 7/7] fbsplash - documentation
    ... the helper directly. ... > + The kernel issues this command to request image data. ... in ioctl arguments only cause trouble in mixed 32/64 bit environments. ...
    (Linux-Kernel)
  • [PATCH] unregister_ioctl32_conversion and modules. ioctl32 revisited.
    ... Andi Kleen suggested I submit the following patch to you. ... ioctl_native is called on native ioctl syscall, without BKL being taken, ... While the core kernel doesn't have ... -asmlinkage long sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg) ...
    (Linux-Kernel)
  • HEADS UP (preliminary): KBI breakage is about to happen
    ... It will bring ether_ioctl() into accord with ioctlWRT ... the type of the command argument. ... uneasy about squeezing u_long into int when ether_ioctlis called ... so this patch will be a little step on ...
    (freebsd-current)
  • Re: BUG: unable to handle kernel NULL pointer dereference (drm_getunique)
    ... unable to handle kernel NULL pointer dereference at 00000000 ... My patch fixes this, but here is a better one that checks the whole cmd ... This patch checks the incoming ioctl command against the defined ones ... This patch will break some other parts of the DRM interface, ...
    (Linux-Kernel)
  • HEADS UP: KBI breakage for Ethernet modules
    ... It will bring ether_ioctl() into accord with ioctlWRT ... the type of the command argument. ... so this patch will be a little step on ... This change will inevitably break the kernel interface to network ...
    (freebsd-current)