mirror of
https://github.com/AuxXxilium/kmod.git
synced 2024-11-24 07:20:52 +07:00
testsuite: Do not provide finit_module(2) on older kernels
If the test's uname -r is less that 3.8, return -ENOSYS from finit_module(), so that the fallback is tested.
This commit is contained in:
parent
2ce5de0ae6
commit
063086e038
@ -37,6 +37,7 @@
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <sys/utsname.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/* kmod_elf_get_section() is not exported, we need the private header */
|
||||
@ -280,6 +281,25 @@ long init_module(void *mem, unsigned long len, const char *args)
|
||||
return err;
|
||||
}
|
||||
|
||||
static int check_kernel_version(int major, int minor)
|
||||
{
|
||||
struct utsname u;
|
||||
const char *p;
|
||||
int maj = 0, min = 0;
|
||||
|
||||
if (uname(&u) < 0)
|
||||
return false;
|
||||
for (p = u.release; *p >= '0' && *p <= '9'; p++)
|
||||
maj = maj * 10 + *p - '0';
|
||||
if (*p == '.')
|
||||
for (p++; *p >= '0' && *p <= '9'; p++)
|
||||
min = min * 10 + *p - '0';
|
||||
if (maj > major || (maj == major && min >= minor))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
TS_EXPORT int finit_module(const int fd, const char *args, const int flags);
|
||||
|
||||
int finit_module(const int fd, const char *args, const int flags)
|
||||
@ -289,6 +309,10 @@ int finit_module(const int fd, const char *args, const int flags)
|
||||
unsigned long len;
|
||||
struct stat st;
|
||||
|
||||
if (!check_kernel_version(3, 8)) {
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
}
|
||||
if (fstat(fd, &st) < 0)
|
||||
return -1;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user