diff options
author | root <root@rshg054.dnsready.net> | 2012-01-09 23:14:46 +0000 |
---|---|---|
committer | root <root@rshg054.dnsready.net> | 2012-01-09 23:14:46 +0000 |
commit | fdcaf644692e151ddc596b148465ce4a77e6b670 (patch) | |
tree | f462377d189cdc42041c78bf22402fec369a48c4 /testing/kmod | |
parent | 7a3611f5caa5e34c1f2b582640f97b733110ae63 (diff) |
Mon Jan 9 23:14:46 UTC 2012
Diffstat (limited to 'testing/kmod')
-rw-r--r-- | testing/kmod/PKGBUILD | 14 | ||||
-rw-r--r-- | testing/kmod/fix-error-path-when-loading-deps.patch | 35 | ||||
-rw-r--r-- | testing/kmod/use-path-max-for-alias-names.patch | 147 |
3 files changed, 192 insertions, 4 deletions
diff --git a/testing/kmod/PKGBUILD b/testing/kmod/PKGBUILD index d278860cb..e0269b3df 100644 --- a/testing/kmod/PKGBUILD +++ b/testing/kmod/PKGBUILD @@ -1,9 +1,9 @@ -# $Id: PKGBUILD 146226 2012-01-06 11:00:10Z dreisner $ +# $Id: PKGBUILD 146297 2012-01-08 22:05:13Z dreisner $ # Maintainer: Dave Reisner <dreisner@archlinux.org> pkgname=kmod pkgver=3 -pkgrel=4 +pkgrel=5 pkgdesc="Linux kernel module handling" arch=('i686' 'x86_64') url="http://git.profusion.mobi/cgit.cgi/kmod.git" @@ -15,15 +15,21 @@ conflicts=('module-init-tools') replaces=('module-init-tools') source=("http://packages.profusion.mobi/$pkgname/$pkgname-$pkgver.tar.xz" "depmod-search.conf" - "return-non-zero-on-fail.patch") + "return-non-zero-on-fail.patch" + "use-path-max-for-alias-names.patch" + "fix-error-path-when-loading-deps.patch") md5sums=('bc0e69f75c2ac22c091f05e166e86c5d' '4b8cbcbc54b9029c99fd730e257d4436' - '4be6f783a7fc2d1747ccaa2536d2e88f') + '4be6f783a7fc2d1747ccaa2536d2e88f' + '4d801693a6788236b4ed578c24514d62' + 'd0f01e506e825156760e6129f04eea28') build() { cd "$pkgname-$pkgver" patch -Np1 <"$srcdir/return-non-zero-on-fail.patch" + patch -Np1 <"$srcdir/use-path-max-for-alias-names.patch" + patch -Np1 <"$srcdir/fix-error-path-when-loading-deps.patch" ./configure \ --sysconfdir=/etc \ diff --git a/testing/kmod/fix-error-path-when-loading-deps.patch b/testing/kmod/fix-error-path-when-loading-deps.patch new file mode 100644 index 000000000..0046d19b9 --- /dev/null +++ b/testing/kmod/fix-error-path-when-loading-deps.patch @@ -0,0 +1,35 @@ +From cb0d0b72128ac566aad9a72800c5a64af66f0b6e Mon Sep 17 00:00:00 2001 +From: Lucas De Marchi <lucas.demarchi@profusion.mobi> +Date: Sun, 8 Jan 2012 18:08:05 -0200 +Subject: [PATCH] modprobe: fix error path when loading dependencies + +demarchi> scenario is the following: +demarchi> modA depends on modB and modC +demarchi> if there's a race when trying to insert a dependency of a module, say + modB, it will stop loading all the modules +demarchi> it should check by "module already loaded error" +demarchi> like it does for modA +--- + tools/kmod-modprobe.c | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +diff --git a/tools/kmod-modprobe.c b/tools/kmod-modprobe.c +index eaf9346..2cda935 100644 +--- a/tools/kmod-modprobe.c ++++ b/tools/kmod-modprobe.c +@@ -666,9 +666,11 @@ static int insmod_do_deps_list(struct kmod_module *parent, struct kmod_list *dep + flags |= KMOD_INSERT_FORCE_VERMAGIC; + + r = kmod_module_insert_module(dm, flags, opts); ++ if (r == -EEXIST && !first_time) ++ r = 0; + if (r < 0) { + WRN("could not insert '%s': %s\n", +- dmname, strerror(-r)); ++ dmname, strerror(-r)); + goto dep_error; + } + } +-- +1.7.8.1 + diff --git a/testing/kmod/use-path-max-for-alias-names.patch b/testing/kmod/use-path-max-for-alias-names.patch new file mode 100644 index 000000000..e97ae7c49 --- /dev/null +++ b/testing/kmod/use-path-max-for-alias-names.patch @@ -0,0 +1,147 @@ +From 6daceb2f1f4d442ba04752aaa1cf43d554d5f646 Mon Sep 17 00:00:00 2001 +From: Lucas De Marchi <lucas.demarchi@profusion.mobi> +Date: Sun, 8 Jan 2012 01:02:29 -0200 +Subject: [PATCH] Replace NAME_MAX with PATH_MAX for module aliases + +Module aliases can be bigger than NAME_MAX. So, replace with PATH_MAX +that is bigger enough to hold them. + +Technically in some places NAME_MAX would be sufficient (those using +module names only), but they use functions that can be called with +alias. So increase the buffers in these cases to PATH_MAX too. +--- + libkmod/libkmod-module.c | 10 +++++----- + libkmod/libkmod-util.c | 10 +++++----- + libkmod/libkmod-util.h | 6 +++--- + tools/kmod-depmod.c | 4 ++-- + 4 files changed, 15 insertions(+), 15 deletions(-) + +diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c +index f2359a9..880bac5 100644 +--- a/libkmod/libkmod-module.c ++++ b/libkmod/libkmod-module.c +@@ -185,7 +185,7 @@ KMOD_EXPORT int kmod_module_new_from_name(struct kmod_ctx *ctx, + { + struct kmod_module *m; + size_t namelen; +- char name_norm[NAME_MAX]; ++ char name_norm[PATH_MAX]; + char *namesep; + + if (ctx == NULL || name == NULL || mod == NULL) +@@ -237,11 +237,11 @@ int kmod_module_new_from_alias(struct kmod_ctx *ctx, const char *alias, + const char *name, struct kmod_module **mod) + { + int err; +- char key[NAME_MAX]; ++ char key[PATH_MAX]; + size_t namelen = strlen(name); + size_t aliaslen = strlen(alias); + +- if (namelen + aliaslen + 2 > NAME_MAX) ++ if (namelen + aliaslen + 2 > PATH_MAX) + return -ENAMETOOLONG; + + memcpy(key, name, namelen); +@@ -283,7 +283,7 @@ KMOD_EXPORT int kmod_module_new_from_path(struct kmod_ctx *ctx, + struct kmod_module *m; + int err; + struct stat st; +- char name[NAME_MAX]; ++ char name[PATH_MAX]; + char *abspath; + size_t namelen; + +@@ -434,7 +434,7 @@ KMOD_EXPORT int kmod_module_new_from_lookup(struct kmod_ctx *ctx, + struct kmod_list **list) + { + int err; +- char alias[NAME_MAX]; ++ char alias[PATH_MAX]; + + if (ctx == NULL || given_alias == NULL) + return -ENOENT; +diff --git a/libkmod/libkmod-util.c b/libkmod/libkmod-util.c +index 75e2fea..344d94a 100644 +--- a/libkmod/libkmod-util.c ++++ b/libkmod/libkmod-util.c +@@ -121,11 +121,11 @@ char *underscores(struct kmod_ctx *ctx, char *s) + return s; + } + +-inline int alias_normalize(const char *alias, char buf[NAME_MAX], size_t *len) ++inline int alias_normalize(const char *alias, char buf[PATH_MAX], size_t *len) + { + size_t s; + +- for (s = 0; s < NAME_MAX - 1; s++) { ++ for (s = 0; s < PATH_MAX - 1; s++) { + const char c = alias[s]; + switch (c) { + case '-': +@@ -160,12 +160,12 @@ finish: + return 0; + } + +-inline char *modname_normalize(const char *modname, char buf[NAME_MAX], ++inline char *modname_normalize(const char *modname, char buf[PATH_MAX], + size_t *len) + { + size_t s; + +- for (s = 0; s < NAME_MAX - 1; s++) { ++ for (s = 0; s < PATH_MAX - 1; s++) { + const char c = modname[s]; + if (c == '-') + buf[s] = '_'; +@@ -183,7 +183,7 @@ inline char *modname_normalize(const char *modname, char buf[NAME_MAX], + return buf; + } + +-char *path_to_modname(const char *path, char buf[NAME_MAX], size_t *len) ++char *path_to_modname(const char *path, char buf[PATH_MAX], size_t *len) + { + char *modname; + +diff --git a/libkmod/libkmod-util.h b/libkmod/libkmod-util.h +index 3cd352c..e8ed5ad 100644 +--- a/libkmod/libkmod-util.h ++++ b/libkmod/libkmod-util.h +@@ -20,9 +20,9 @@ int read_str_ulong(int fd, unsigned long *value, int base) __must_check __attrib + char *strchr_replace(char *s, int c, char r); + bool path_is_absolute(const char *p) __must_check __attribute__((nonnull(1))); + char *path_make_absolute_cwd(const char *p) __must_check __attribute__((nonnull(1))); +-int alias_normalize(const char *alias, char buf[NAME_MAX], size_t *len) __must_check __attribute__((nonnull(1,2))); +-char *modname_normalize(const char *modname, char buf[NAME_MAX], size_t *len) __attribute__((nonnull(1, 2))); +-char *path_to_modname(const char *path, char buf[NAME_MAX], size_t *len) __attribute__((nonnull(2))); ++int alias_normalize(const char *alias, char buf[PATH_MAX], size_t *len) __must_check __attribute__((nonnull(1,2))); ++char *modname_normalize(const char *modname, char buf[PATH_MAX], size_t *len) __attribute__((nonnull(1, 2))); ++char *path_to_modname(const char *path, char buf[PATH_MAX], size_t *len) __attribute__((nonnull(2))); + unsigned long long ts_usec(const struct timespec *ts); + + #endif +diff --git a/tools/kmod-depmod.c b/tools/kmod-depmod.c +index 70c397c..4726522 100644 +--- a/tools/kmod-depmod.c ++++ b/tools/kmod-depmod.c +@@ -1249,7 +1249,7 @@ static int depmod_modules_search_file(struct depmod *depmod, size_t baselen, siz + struct kmod_module *kmod; + struct mod *mod; + const char *relpath; +- char modname[NAME_MAX]; ++ char modname[PATH_MAX]; + const struct kmod_ext *eitr; + size_t modnamelen; + uint8_t matches = 0; +@@ -2101,7 +2101,7 @@ static int output_builtin_bin(struct depmod *depmod, FILE *out) + { + FILE *in; + struct index_node *idx; +- char infile[PATH_MAX], line[PATH_MAX], modname[NAME_MAX]; ++ char infile[PATH_MAX], line[PATH_MAX], modname[PATH_MAX]; + + if (out == stdout) + return 0; +-- +1.7.8.1 + |