NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

kern/51598: compat code gets pulled into non-compat kernels

>Number:         51598
>Category:       kern
>Synopsis:       (networking) compat code is pulled into non-compat kernels
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Nov 03 22:15:00 +0000 2016
>Originator:     Paul Goyette
>Release:        NetBSD 7.99.36
| Paul Goyette     | PGP Key fingerprint:     | E-mail addresses:      |
| (Retired)        | FA29 0E3B 35AF E8AE 6651 | paul at   |
| Kernel Developer | 0786 F758 55DE 53BA 7731 | pgoyette at |
System: NetBSD 7.99.36 NetBSD 7.99.36 (SPEEDY 2016-09-09 11:36:24) #0: Fri Sep 9 20:18:34 PHT 2016 amd64
Architecture: x86_64
Machine: amd64
The functions compat_cvtcmd() and compat_ifioctl() are defined in source
file sys/compat/common/if_43.c and included in the libcompat library.  In
sys/net/if.c there are calls to each of these routines which do not depend
on any version-specific COMPAT_xx option.  Indeed, these calls are
conditional only on OIFREQ, which appears to be unconditionally #define in

As a result, the compat code gets pulled into all kernels by the linker (so
it can resolve the symbol references).  Thus it is not possible to include
if_43.c in the spearately-loaded compat module (which is where it most
likely belongs), since loading such a module would result in redefinition
of the routines.
Move if_43.c out of sys/compat/common/Makefile and into Makefile/sysio, and
build a modular kernel, removing all occurrences of COMPAT_[0-9][0-9] from
the configuration file.  Boot, and try to 'modload compat'
Ideally, these two functions would be invoked by indirect pointers rather
than direct function call.  Then, the default kernel builds could provide
no-op stubs in if.c, and the compat_modcmd(MODULE_CMD_INIT, ...) code
could replace the pointers to reference the if_43 replacements.  (Of course,
the MODULE_CMD_FINI code should restore the original values when the module
is unloaded.)


Home | Main Index | Thread Index | Old Index