Commit 21e80f38 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'modules-6.7-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/linux

Pull modules updates from Luis Chamberlain:
 "The only thing worth highligthing is that gzip moves to use vmalloc()
  instead of kmalloc just as we had a fix for this for zstd on v6.6-rc1.

  The rest is regular house keeping, keeping things neat, tidy, and
  boring"

[ The kmalloc -> vmalloc conversion is not the right approach.

  Unless you know you need huge areas or know you need to use virtual
  mappings for some reason (playing with protection bits or whatever),
  you should use kvmalloc()/kvfree, which automatically picks the right
  allocation model    - Linus ]

* tag 'modules-6.7-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/linux:
  module: Annotate struct module_notes_attrs with __counted_by
  module: Fix comment typo
  module: Make is_valid_name() return bool
  module: Make is_mapping_symbol() return bool
  module/decompress: use vmalloc() for gzip decompression workspace
  MAINTAINERS: add include/linux/module*.h to modules
  module: Clarify documentation of module_param_call()
parents 426ee519 ea0b0bce
...@@ -14527,7 +14527,7 @@ L: linux-kernel@vger.kernel.org ...@@ -14527,7 +14527,7 @@ L: linux-kernel@vger.kernel.org
S: Maintained S: Maintained
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/linux.git modules-next T: git git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/linux.git modules-next
F: include/linux/kmod.h F: include/linux/kmod.h
F: include/linux/module.h F: include/linux/module*.h
F: kernel/module/ F: kernel/module/
F: lib/test_kmod.c F: lib/test_kmod.c
F: scripts/module* F: scripts/module*
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#define _LINUX_MODULE_SYMBOL_H #define _LINUX_MODULE_SYMBOL_H
/* This ignores the intensely annoying "mapping symbols" found in ELF files. */ /* This ignores the intensely annoying "mapping symbols" found in ELF files. */
static inline int is_mapping_symbol(const char *str) static inline bool is_mapping_symbol(const char *str)
{ {
if (str[0] == '.' && str[1] == 'L') if (str[0] == '.' && str[1] == 'L')
return true; return true;
......
...@@ -293,7 +293,11 @@ struct kparam_array ...@@ -293,7 +293,11 @@ struct kparam_array
= { __param_str_##name, THIS_MODULE, ops, \ = { __param_str_##name, THIS_MODULE, ops, \
VERIFY_OCTAL_PERMISSIONS(perm), level, flags, { arg } } VERIFY_OCTAL_PERMISSIONS(perm), level, flags, { arg } }
/* Obsolete - use module_param_cb() */ /*
* Useful for describing a set/get pair used only once (i.e. for this
* parameter). For repeated set/get pairs (i.e. the same struct
* kernel_param_ops), use module_param_cb() instead.
*/
#define module_param_call(name, _set, _get, arg, perm) \ #define module_param_call(name, _set, _get, arg, perm) \
static const struct kernel_param_ops __param_ops_##name = \ static const struct kernel_param_ops __param_ops_##name = \
{ .flags = 0, .set = _set, .get = _get }; \ { .flags = 0, .set = _set, .get = _get }; \
......
...@@ -100,7 +100,7 @@ static ssize_t module_gzip_decompress(struct load_info *info, ...@@ -100,7 +100,7 @@ static ssize_t module_gzip_decompress(struct load_info *info,
s.next_in = buf + gzip_hdr_len; s.next_in = buf + gzip_hdr_len;
s.avail_in = size - gzip_hdr_len; s.avail_in = size - gzip_hdr_len;
s.workspace = kmalloc(zlib_inflate_workspacesize(), GFP_KERNEL); s.workspace = vmalloc(zlib_inflate_workspacesize());
if (!s.workspace) if (!s.workspace)
return -ENOMEM; return -ENOMEM;
...@@ -138,7 +138,7 @@ static ssize_t module_gzip_decompress(struct load_info *info, ...@@ -138,7 +138,7 @@ static ssize_t module_gzip_decompress(struct load_info *info,
out_inflate_end: out_inflate_end:
zlib_inflateEnd(&s); zlib_inflateEnd(&s);
out: out:
kfree(s.workspace); vfree(s.workspace);
return retval; return retval;
} }
#elif defined(CONFIG_MODULE_COMPRESS_XZ) #elif defined(CONFIG_MODULE_COMPRESS_XZ)
......
...@@ -126,7 +126,7 @@ static LIST_HEAD(dup_failed_modules); ...@@ -126,7 +126,7 @@ static LIST_HEAD(dup_failed_modules);
* These typically should not happen unless your system is under memory * These typically should not happen unless your system is under memory
* pressure. * pressure.
* * invalid_becoming_bytes: total number of bytes allocated and freed used * * invalid_becoming_bytes: total number of bytes allocated and freed used
* used to read the kernel module userspace wants us to read before we * to read the kernel module userspace wants us to read before we
* promote it to be processed to be added to our @modules linked list. These * promote it to be processed to be added to our @modules linked list. These
* failures can happen if we had a check in between a successful kernel_read_file_from_fd() * failures can happen if we had a check in between a successful kernel_read_file_from_fd()
* call and right before we allocate the our private memory for the module * call and right before we allocate the our private memory for the module
......
...@@ -143,7 +143,7 @@ static void remove_sect_attrs(struct module *mod) ...@@ -143,7 +143,7 @@ static void remove_sect_attrs(struct module *mod)
struct module_notes_attrs { struct module_notes_attrs {
struct kobject *dir; struct kobject *dir;
unsigned int notes; unsigned int notes;
struct bin_attribute attrs[]; struct bin_attribute attrs[] __counted_by(notes);
}; };
static ssize_t module_notes_read(struct file *filp, struct kobject *kobj, static ssize_t module_notes_read(struct file *filp, struct kobject *kobj,
......
...@@ -1059,12 +1059,12 @@ static int secref_whitelist(const char *fromsec, const char *fromsym, ...@@ -1059,12 +1059,12 @@ static int secref_whitelist(const char *fromsec, const char *fromsym,
* only by merging __exit and __init sections into __text, bloating * only by merging __exit and __init sections into __text, bloating
* the kernel (which is especially evil on embedded platforms). * the kernel (which is especially evil on embedded platforms).
*/ */
static inline int is_valid_name(struct elf_info *elf, Elf_Sym *sym) static inline bool is_valid_name(struct elf_info *elf, Elf_Sym *sym)
{ {
const char *name = elf->strtab + sym->st_name; const char *name = elf->strtab + sym->st_name;
if (!name || !strlen(name)) if (!name || !strlen(name))
return 0; return false;
return !is_mapping_symbol(name); return !is_mapping_symbol(name);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment