Date: Sat, 16 Feb 2002 17:56:14 -0800 From: Terry Lambert <tlambert2@mindspring.com> To: Kris Kennaway <kris@obsecurity.org> Cc: hackers@FreeBSD.org Subject: Re: Module versioning and linux.ko Message-ID: <3C6F0DBE.8C5C8718@mindspring.com> References: <20020216154043.A44137@xor.obsecurity.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Kris Kennaway wrote: > Is there anything which can be done in -stable to prevent new kernels > from accepting old linux.ko modules? At some point in the past 3 > months something changed in the kernel causing the old module to panic > at runtime in elf_linux_fixup(). Yes, people should be upgrading > their old modules when they upgrade the kernel, but it's an obvious > source of confusion if you forget or don't realise you're actually > using the module. Not in -stable, unless you are willing to change interfaces. The proper place to do interface versioning is in the interface, not in the consumer of the interface. For each interface, you end up with: #define API_VERSION_FOO 0x00000001 struct api_foo { /* interface foo*/ int version; int (*fooA)(int i, char *p); int (*fooB)(char *p); }; int api_use_foo( struct api_foo *); ... static struct api_foo linux_api_foo = { API_VERSION_FOO }; int linux_abi_init(...) { ... if( api_use_foo( &linux_api_foo)) { printf( "linux_abi_init: can't register\n"); return( -1); } ... } int linux_syscall_fooA( int i, char *p) { char *p2; int rv; ... p2 = linux_convert_p( p); rv = (*linux_api_foo.fooA)(int i, char *p2); ... /* other stuff*/ rv = linux_convert_result( rv); return( rv); } -- Terry To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3C6F0DBE.8C5C8718>