diff options
author | Hung-ying Tyan <tyanh@google.com> | 2016-06-24 13:21:09 +0800 |
---|---|---|
committer | Hung-ying Tyan <tyanh@google.com> | 2016-06-24 13:21:09 +0800 |
commit | 23a574a195ebe4f755a1f305952332ed18a1242f (patch) | |
tree | b5b8e44f5c6bcdbd7259f156a016f4899e756368 /init/builtins.cpp | |
parent | a4e35be4a44331f22582593d7934620a9422b534 (diff) | |
parent | 66277db8d06f028b9c2e57778e631891334d6f77 (diff) |
resolve merge conflicts of 66277db to stage-aosp-master
Change-Id: I58b1f7fec779c707ac4048ae5401087ec4b7c8b0
Diffstat (limited to 'init/builtins.cpp')
-rw-r--r-- | init/builtins.cpp | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/init/builtins.cpp b/init/builtins.cpp index 63cc3bc1f..70f3cdeb9 100644 --- a/init/builtins.cpp +++ b/init/builtins.cpp @@ -36,6 +36,7 @@ #include <sys/wait.h> #include <unistd.h> #include <linux/loop.h> +#include <linux/module.h> #include <ext4_crypt.h> #include <ext4_crypt_init_extensions.h> @@ -45,6 +46,7 @@ #include <fs_mgr.h> #include <android-base/file.h> #include <android-base/parseint.h> +#include <android-base/strings.h> #include <android-base/stringprintf.h> #include <bootloader_message_writer.h> #include <cutils/partition_utils.h> @@ -68,13 +70,13 @@ static const int kTerminateServiceDelayMicroSeconds = 50000; -static int insmod(const char *filename, const char *options) { +static int insmod(const char *filename, const char *options, int flags) { int fd = open(filename, O_RDONLY | O_NOFOLLOW | O_CLOEXEC); if (fd == -1) { ERROR("insmod: open(\"%s\") failed: %s", filename, strerror(errno)); return -1; } - int rc = syscall(__NR_finit_module, fd, options, 0); + int rc = syscall(__NR_finit_module, fd, options, flags); if (rc == -1) { ERROR("finit_module for \"%s\" failed: %s", filename, strerror(errno)); } @@ -282,17 +284,17 @@ static int do_ifup(const std::vector<std::string>& args) { } static int do_insmod(const std::vector<std::string>& args) { - std::string options; + int flags = 0; + auto it = args.begin() + 1; - if (args.size() > 2) { - options += args[2]; - for (std::size_t i = 3; i < args.size(); ++i) { - options += ' '; - options += args[i]; - } + if (!(*it).compare("-f")) { + flags = MODULE_INIT_IGNORE_VERMAGIC | MODULE_INIT_IGNORE_MODVERSIONS; + it++; } - return insmod(args[1].c_str(), options.c_str()); + std::string filename = *it++; + std::string options = android::base::Join(std::vector<std::string>(it, args.end()), ' '); + return insmod(filename.c_str(), options.c_str(), flags); } static int do_mkdir(const std::vector<std::string>& args) { |