The source for the Linux kernel used in Windows Subsystem for Linux 2 (WSL2)
Перейти к файлу
David Vernet 5ef3dd2055 livepatch: Fix kobject refcount bug on klp_init_patch_early failure path
When enabling a klp patch with klp_enable_patch(), klp_init_patch_early()
is invoked to initialize the kobjects for the patch itself, as well as the
'struct klp_object' and 'struct klp_func' objects that comprise it.
However, there are some error paths in klp_enable_patch() where some
kobjects may have been initialized with kobject_init(), but an error code
is still returned due to e.g. a 'struct klp_object' having a NULL funcs
pointer.

In these paths, the initial reference of the kobject of the 'struct
klp_patch' may never be released, along with one or more of its objects and
their functions, as kobject_put() is not invoked on the cleanup path if
klp_init_patch_early() returns an error code.

For example, if an object entry such as the following were added to the
sample livepatch module's klp patch, it would cause the vmlinux klp_object,
and its klp_func which updates 'cmdline_proc_show', to never be released:

static struct klp_object objs[] = {
	{
		/* name being NULL means vmlinux */
		.funcs = funcs,
	},
	{
		/* NULL funcs -- would cause reference leak */
		.name = "kvm",
	}, { }
};

Without this change, if CONFIG_DEBUG_KOBJECT is enabled, and the sample klp
patch is loaded, the kobjects (the patch, the vmlinux 'struct klp_object',
and its func) are observed as initialized, but never released, in the dmesg
log output.  With the change, these kobject references no longer fail to be
released as the error case is properly handled before they are initialized.

Signed-off-by: David Vernet <void@manifault.com>
Reviewed-by: Petr Mladek <pmladek@suse.com>
Acked-by: Miroslav Benes <mbenes@suse.cz>
Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Petr Mladek <pmladek@suse.com>
2022-01-04 13:54:24 +01:00
Documentation Documentation: livepatch: Add livepatch API page 2021-12-23 11:35:53 +01:00
LICENSES LICENSES/dual/CC-BY-4.0: Git rid of "smart quotes" 2021-07-15 06:31:24 -06:00
arch Merge branch 'stable/for-linus-5.15' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/swiotlb 2021-09-03 10:34:44 -07:00
block Merge branch 'akpm' (patches from Andrew) 2021-09-03 10:08:28 -07:00
certs certs: Add support for using elliptic curve keys for signing modules 2021-08-23 19:55:42 +03:00
crypto Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2021-08-30 12:57:10 -07:00
drivers IOMMU Updates for Linux v5.15 2021-09-03 10:44:35 -07:00
fs Merge branch 'akpm' (patches from Andrew) 2021-09-03 10:08:28 -07:00
include IOMMU Updates for Linux v5.15 2021-09-03 10:44:35 -07:00
init printk changes for 5.15 2021-09-01 18:41:13 -07:00
ipc memcg: enable accounting of ipc resources 2021-09-03 09:58:12 -07:00
kernel livepatch: Fix kobject refcount bug on klp_init_patch_early failure path 2022-01-04 13:54:24 +01:00
lib Merge branch 'akpm' (patches from Andrew) 2021-09-03 10:08:28 -07:00
mm Merge branch 'akpm' (patches from Andrew) 2021-09-03 10:08:28 -07:00
net TTY / Serial patches for 5.15-rc1 2021-09-01 09:51:16 -07:00
samples VFIO update for v5.15-rc1 2021-09-02 13:41:33 -07:00
scripts VFIO update for v5.15-rc1 2021-09-02 13:41:33 -07:00
security Merge branch 'akpm' (patches from Andrew) 2021-09-03 10:08:28 -07:00
sound parisc architecture updates for kernel 5.15: 2021-09-02 13:16:00 -07:00
tools Merge branch 'akpm' (patches from Andrew) 2021-09-03 10:08:28 -07:00
usr
virt KVM: Do not leak memory for duplicate debugfs directories 2021-08-04 06:02:03 -04:00
.clang-format
.cocciconfig
.get_maintainer.ignore
.gitattributes
.gitignore
.mailmap mailmap: update email address of Matthias Fuchs and Thomas Körper 2021-08-19 09:39:44 +02:00
COPYING
CREDITS
Kbuild
Kconfig
MAINTAINERS IOMMU Updates for Linux v5.15 2021-09-03 10:44:35 -07:00
Makefile parisc architecture updates for kernel 5.15: 2021-09-02 13:16:00 -07:00
README

README

Linux kernel
============

There are several guides for kernel developers and users. These guides can
be rendered in a number of formats, like HTML and PDF. Please read
Documentation/admin-guide/README.rst first.

In order to build the documentation, use ``make htmldocs`` or
``make pdfdocs``.  The formatted documentation can also be read online at:

    https://www.kernel.org/doc/html/latest/

There are various text files in the Documentation/ subdirectory,
several of them using the Restructured Text markup notation.

Please read the Documentation/process/changes.rst file, as it contains the
requirements for building and running the kernel, and information about
the problems which may result by upgrading your kernel.