Signed-off-by: Ting Liu <b28...@freescale.com>
---
meta/recipes-kernel/kmod/kmod-native_git.bb | 1 +
.../kmod/Only-use-O_CLOEXEC-if-it-is-defined.patch | 138 ++++++++++++++++++++
2 files changed, 139 insertions(+), 0 deletions(-)
create mode 100644
meta/recipes-kernel/kmod/kmod/Only-use-O_CLOEXEC-if-it-is-defined.patch
diff --git a/meta/recipes-kernel/kmod/kmod-native_git.bb
b/meta/recipes-kernel/kmod/kmod-native_git.bb
index f0e274e..a8312ef 100644
--- a/meta/recipes-kernel/kmod/kmod-native_git.bb
+++ b/meta/recipes-kernel/kmod/kmod-native_git.bb
@@ -8,6 +8,7 @@ DEPENDS += "zlib-native"
inherit native
SRC_URI += "file://Change-to-calling-bswap_-instead-of-htobe-and-be-toh.patch
\
+ file://Only-use-O_CLOEXEC-if-it-is-defined.patch \
"
do_install_append (){
diff --git
a/meta/recipes-kernel/kmod/kmod/Only-use-O_CLOEXEC-if-it-is-defined.patch
b/meta/recipes-kernel/kmod/kmod/Only-use-O_CLOEXEC-if-it-is-defined.patch
new file mode 100644
index 0000000..0c35615
--- /dev/null
+++ b/meta/recipes-kernel/kmod/kmod/Only-use-O_CLOEXEC-if-it-is-defined.patch
@@ -0,0 +1,138 @@
+From 8dc835c57caa5ca2eae9c4ebc8e2bc6dcff94bc3 Mon Sep 17 00:00:00 2001
+From: Ting Liu <b28...@freescale.com>
+Date: Mon, 13 Jan 2014 11:11:28 +0800
+Subject: [PATCH] Only use O_CLOEXEC if it is defined
+
+O_CLOEXEC is not available on some distro, such as centos 5.x
+
+Signed-off-by: Ting Liu <b28...@freescale.com>
+---
+ libkmod/libkmod-config.c | 10 +++++++++-
+ libkmod/libkmod-file.c | 4 ++++
+ libkmod/libkmod-index.c | 7 +++++++
+ libkmod/libkmod-module.c | 17 +++++++++++++++++
+ 4 files changed, 37 insertions(+), 1 deletion(-)
+
+diff --git a/libkmod/libkmod-config.c b/libkmod/libkmod-config.c
+index 32adb8b..def805d 100644
+--- a/libkmod/libkmod-config.c
++++ b/libkmod/libkmod-config.c
+@@ -525,7 +525,11 @@ static int kmod_config_parse_kcmdline(struct kmod_config
*config)
+ int fd, err;
+ char *p, *modname, *param = NULL, *value = NULL;
+
++#ifdef O_CLOEXEC
+ fd = open("/proc/cmdline", O_RDONLY|O_CLOEXEC);
++#else
++ fd = open("/proc/cmdline", O_RDONLY);
++#endif
+ if (fd < 0) {
+ err = -errno;
+ DBG(config->ctx, "could not open '/proc/cmdline' for reading:
%m\n");
+@@ -889,7 +893,11 @@ int kmod_config_new(struct kmod_ctx *ctx, struct
kmod_config **p_config,
+ snprintf(fn, sizeof(fn),"%s/%s", cf->path,
+ cf->name);
+
+- fd = open(fn, O_RDONLY|O_CLOEXEC);
++#ifdef O_CLOEXEC
++ fd = open(fn, O_RDONLY|O_CLOEXEC);
++#else
++ fd = open(fn, O_RDONLY);
++#endif
+ DBG(ctx, "parsing file '%s' fd=%d\n", fn, fd);
+
+ if (fd >= 0)
+diff --git a/libkmod/libkmod-file.c b/libkmod/libkmod-file.c
+index feb4a15..d659765 100644
+--- a/libkmod/libkmod-file.c
++++ b/libkmod/libkmod-file.c
+@@ -292,7 +292,11 @@ struct kmod_file *kmod_file_open(const struct kmod_ctx
*ctx,
+ if (file == NULL)
+ return NULL;
+
++#ifdef O_CLOEXEC
+ file->fd = open(filename, O_RDONLY|O_CLOEXEC);
++#else
++ file->fd = open(filename, O_RDONLY);
++#endif
+ if (file->fd < 0) {
+ err = -errno;
+ goto error;
+diff --git a/libkmod/libkmod-index.c b/libkmod/libkmod-index.c
+index fa7db41..4b113ed 100644
+--- a/libkmod/libkmod-index.c
++++ b/libkmod/libkmod-index.c
+@@ -795,10 +795,17 @@ struct index_mm *index_mm_open(struct kmod_ctx *ctx,
const char *filename,
+ return NULL;
+ }
+
++#ifdef O_CLOEXEC
+ if ((fd = open(filename, O_RDONLY|O_CLOEXEC)) < 0) {
+ DBG(ctx, "open(%s, O_RDONLY|O_CLOEXEC): %m\n", filename);
+ goto fail_open;
+ }
++#else
++ if ((fd = open(filename, O_RDONLY) < 0)) {
++ DBG(ctx, "open(%s, O_RDONLY): %m\n", filename);
++ goto fail_open;
++ }
++#endif
+
+ fstat(fd, &st);
+ if ((size_t) st.st_size < sizeof(hdr))
+diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c
+index 2f92e16..a911dfe 100644
+--- a/libkmod/libkmod-module.c
++++ b/libkmod/libkmod-module.c
+@@ -1692,7 +1692,11 @@ KMOD_EXPORT int kmod_module_get_initstate(const struct
kmod_module *mod)
+
+ pathlen = snprintf(path, sizeof(path),
+ "/sys/module/%s/initstate", mod->name);
++#ifdef O_CLOEXEC
+ fd = open(path, O_RDONLY|O_CLOEXEC);
++#else
++ fd = open(path, O_RDONLY);
++#endif
+ if (fd < 0) {
+ err = -errno;
+
+@@ -1762,7 +1766,11 @@ KMOD_EXPORT long kmod_module_get_size(const struct
kmod_module *mod)
+ return -errno;
+
+ /* available as of linux 3.3.x */
++#ifdef O_CLOEXEC
+ cfd = openat(dfd, "coresize", O_RDONLY|O_CLOEXEC);
++#else
++ cfd = openat(dfd, "coresize", O_RDONLY);
++#endif
+ if (cfd >= 0) {
+ if (read_str_long(cfd, &size, 10) < 0)
+ ERR(mod->ctx, "failed to read coresize from %s\n",
line);
+@@ -1830,7 +1838,11 @@ KMOD_EXPORT int kmod_module_get_refcnt(const struct
kmod_module *mod)
+ return -ENOENT;
+
+ snprintf(path, sizeof(path), "/sys/module/%s/refcnt", mod->name);
++#ifdef O_CLOEXEC
+ fd = open(path, O_RDONLY|O_CLOEXEC);
++#else
++ fd = open(path, O_RDONLY);
++#endif
+ if (fd < 0) {
+ err = -errno;
+ DBG(mod->ctx, "could not open '%s': %s\n",
+@@ -1973,7 +1985,12 @@ KMOD_EXPORT struct kmod_list
*kmod_module_get_sections(const struct kmod_module
+ continue;
+ }
+
++#ifdef O_CLOEXEC
+ fd = openat(dfd, dent->d_name, O_RDONLY|O_CLOEXEC);
++#else
++ fd = openat(dfd, dent->d_name, O_RDONLY);
++
++#endif
+ if (fd < 0) {
+ ERR(mod->ctx, "could not open '%s/%s': %m\n",
+ dname, dent->d_name);
+--
+1.8.3.2
+