Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp9147180ybl; Fri, 17 Jan 2020 07:06:24 -0800 (PST) X-Google-Smtp-Source: APXvYqz69qRTChTSdohYc6y8peuJdHtFCH5exW45iVV47nxUqaWKbeOOXfWxNbw0MP2uh+CewdvK X-Received: by 2002:a9d:67c1:: with SMTP id c1mr6540347otn.161.1579273584634; Fri, 17 Jan 2020 07:06:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579273584; cv=none; d=google.com; s=arc-20160816; b=Y37HHyNY3S4sWFRzBHgoBWClocDhF2fuY/kzjPU9GAhCNKSJwDlOdqfpm+NxsFanF7 TkjGha2nkdvMu6DvgwOc2HvBfXFjHIx7B2iTEtSWwtrtrRpBAhOv2ys1cUDXjBae0m1S EIj6irtO9XgQL509HKVwmz8lhSwrkqLS0bmqLUvBBSjTw73cjwmSpGsKg0YMX+cGmuNC LehNK/epDlzTwTGNikxMfpt1vf1gyaxrhdbnaKp1i7inGpZ/LKueE9TNex1YNQuPer4i XumSPO3m1J38d3HCsjj60z9tg5QUA7f6JMTLyALOSj5BukaZov6+8Z6qKKmwFIZCUQYN 2c1g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=gsAx/B+W4Wt9gUA3whWzc1jAWtiGzVbyR3XRoTy+rH8=; b=gx8MQOjXm0YEeUVOuvMPkiZLiObrHjXstJet8rA/+qgcNTRII4wdMpss33ceKGeMDM rQ5gNbevCFSwzPyLaNk024l590iTtqHS+mYlIGbDi9M+Y8RgFKjzPBXy5jvnao7xt/se r4gu+TP5tB47D2bFIPaKW+Tw8toJf2K6MgG7INVlr1ShsgM37C45cJnfBu5W30RTOH+U LOGGZ8nT2gLG1gFzbHy6mNYXKH4roDlkye8o4DD0NkVQvNQcrECAdB23jRlawrX0qWoI OERWW+Rh6fL2NDrgGwv/MmBZBmS8HbrvpOkcIneVzcQJ2OLuNNXG07BAam9m5/5m1ebc 9mzA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b10si5433554otq.183.2020.01.17.07.06.11; Fri, 17 Jan 2020 07:06:24 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729184AbgAQPED (ORCPT + 99 others); Fri, 17 Jan 2020 10:04:03 -0500 Received: from mx2.suse.de ([195.135.220.15]:46284 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729107AbgAQPEA (ORCPT ); Fri, 17 Jan 2020 10:04:00 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id AC481BBAE; Fri, 17 Jan 2020 15:03:58 +0000 (UTC) From: Petr Mladek To: Jiri Kosina , Josh Poimboeuf , Miroslav Benes Cc: Joe Lawrence , Kamalesh Babulal , Nicolai Stange , live-patching@vger.kernel.org, linux-kernel@vger.kernel.org, Petr Mladek Subject: [POC 10/23] livepatch: Handle modprobe exit code Date: Fri, 17 Jan 2020 16:03:10 +0100 Message-Id: <20200117150323.21801-11-pmladek@suse.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20200117150323.21801-1-pmladek@suse.com> References: <20200117150323.21801-1-pmladek@suse.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org request_module() returns classic negative error codes when it was not even able to call "modprobe" from some reasons. Otherwise, it returns the exit code multiplied by 256. modprobe exit code is always 1 in case of error. Use -EINVAL instead as the least ugly internal error code. A better solution would be to somehow pass the original error code from the init_module() syscall or at least the error code from klp_module_add() functions. But there is no obvious way how to pass the information. Global variable is not enough because more livepatch modules can be loaded simultaneously from klp_enable_patch() and klp_module_comming(). Signed-off-by: Petr Mladek --- kernel/livepatch/core.c | 3 +++ tools/testing/selftests/livepatch/test-callbacks.sh | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c index 8e693c58b736..19ca8baa2f16 100644 --- a/kernel/livepatch/core.c +++ b/kernel/livepatch/core.c @@ -1109,6 +1109,9 @@ static int klp_try_load_object(const char *patch_name, const char *obj_name) ret = request_module("%s__%s", patch_name, obj_name); if (ret) { + /* modprobe always set exit code 1 on error */ + if (ret > 0) + ret = -EINVAL; pr_info("Module load failed: %s__%s\n", patch_name, obj_name); return ret; } diff --git a/tools/testing/selftests/livepatch/test-callbacks.sh b/tools/testing/selftests/livepatch/test-callbacks.sh index 39a4f35e5f8e..060e5b512367 100755 --- a/tools/testing/selftests/livepatch/test-callbacks.sh +++ b/tools/testing/selftests/livepatch/test-callbacks.sh @@ -331,7 +331,7 @@ $MOD_LIVEPATCH: pre_patch_callback: $MOD_TARGET -> [MODULE_STATE_COMING] Full fo livepatch: pre-patch callback failed for object '$MOD_TARGET' livepatch: patch '$MOD_LIVEPATCH' failed for module '$MOD_TARGET', refusing to load module '$MOD_TARGET' livepatch: Module load failed: ${MOD_LIVEPATCH}__${MOD_TARGET} -modprobe: ERROR: could not insert '$MOD_TARGET': No such device +modprobe: ERROR: could not insert '$MOD_TARGET': Invalid argument % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled livepatch: '$MOD_LIVEPATCH': initializing unpatching transition $MOD_LIVEPATCH: pre_unpatch_callback: vmlinux -- 2.16.4