Lines Matching +full:test +full:- +full:trailing

1 // SPDX-License-Identifier: GPL-2.0-or-later
36 return -EINVAL; in module_sect_read()
40 * trailing NUL byte that sprintf will write: if "buf" is in module_sect_read()
47 kallsyms_show_value(file->f_cred) in module_sect_read()
48 ? battr->private : NULL); in module_sect_read()
59 for (bin_attr = sect_attrs->grp.bin_attrs; *bin_attr; bin_attr++) in free_sect_attrs()
60 kfree((*bin_attr)->attr.name); in free_sect_attrs()
61 kfree(sect_attrs->grp.bin_attrs); in free_sect_attrs()
74 for (i = 0; i < info->hdr->e_shnum; i++) in add_sect_attrs()
75 if (!sect_empty(&info->sechdrs[i])) in add_sect_attrs()
79 return -ENOMEM; in add_sect_attrs()
84 return -ENOMEM; in add_sect_attrs()
88 sect_attrs->grp.name = "sections"; in add_sect_attrs()
89 sect_attrs->grp.bin_attrs = gattr; in add_sect_attrs()
91 sattr = &sect_attrs->attrs[0]; in add_sect_attrs()
92 for (i = 0; i < info->hdr->e_shnum; i++) { in add_sect_attrs()
93 Elf_Shdr *sec = &info->sechdrs[i]; in add_sect_attrs()
98 sattr->attr.name = in add_sect_attrs()
99 kstrdup(info->secstrings + sec->sh_name, GFP_KERNEL); in add_sect_attrs()
100 if (!sattr->attr.name) { in add_sect_attrs()
101 ret = -ENOMEM; in add_sect_attrs()
104 sattr->read = module_sect_read; in add_sect_attrs()
105 sattr->private = (void *)sec->sh_addr; in add_sect_attrs()
106 sattr->size = MODULE_SECT_READ_SIZE; in add_sect_attrs()
107 sattr->attr.mode = 0400; in add_sect_attrs()
111 ret = sysfs_create_group(&mod->mkobj.kobj, &sect_attrs->grp); in add_sect_attrs()
115 mod->sect_attrs = sect_attrs; in add_sect_attrs()
124 if (mod->sect_attrs) { in remove_sect_attrs()
125 sysfs_remove_group(&mod->mkobj.kobj, in remove_sect_attrs()
126 &mod->sect_attrs->grp); in remove_sect_attrs()
131 free_sect_attrs(mod->sect_attrs); in remove_sect_attrs()
132 mod->sect_attrs = NULL; in remove_sect_attrs()
147 kfree(notes_attrs->grp.bin_attrs); in free_notes_attrs()
161 for (i = 0; i < info->hdr->e_shnum; i++) in add_notes_attrs()
162 if (!sect_empty(&info->sechdrs[i]) && in add_notes_attrs()
163 info->sechdrs[i].sh_type == SHT_NOTE) in add_notes_attrs()
171 return -ENOMEM; in add_notes_attrs()
176 return -ENOMEM; in add_notes_attrs()
179 notes_attrs->grp.name = "notes"; in add_notes_attrs()
180 notes_attrs->grp.bin_attrs = gattr; in add_notes_attrs()
182 nattr = &notes_attrs->attrs[0]; in add_notes_attrs()
183 for (loaded = i = 0; i < info->hdr->e_shnum; ++i) { in add_notes_attrs()
184 if (sect_empty(&info->sechdrs[i])) in add_notes_attrs()
186 if (info->sechdrs[i].sh_type == SHT_NOTE) { in add_notes_attrs()
188 nattr->attr.name = mod->sect_attrs->attrs[loaded].attr.name; in add_notes_attrs()
189 nattr->attr.mode = 0444; in add_notes_attrs()
190 nattr->size = info->sechdrs[i].sh_size; in add_notes_attrs()
191 nattr->private = (void *)info->sechdrs[i].sh_addr; in add_notes_attrs()
192 nattr->read = sysfs_bin_attr_simple_read; in add_notes_attrs()
198 ret = sysfs_create_group(&mod->mkobj.kobj, &notes_attrs->grp); in add_notes_attrs()
202 mod->notes_attrs = notes_attrs; in add_notes_attrs()
212 if (mod->notes_attrs) { in remove_notes_attrs()
213 sysfs_remove_group(&mod->mkobj.kobj, in remove_notes_attrs()
214 &mod->notes_attrs->grp); in remove_notes_attrs()
219 free_notes_attrs(mod->notes_attrs); in remove_notes_attrs()
220 mod->notes_attrs = NULL; in remove_notes_attrs()
243 list_for_each_entry(use, &mod->target_list, target_list) in del_usage_links()
244 sysfs_remove_link(use->target->holders_dir, mod->name); in del_usage_links()
256 list_for_each_entry(use, &mod->target_list, target_list) { in add_usage_links()
257 ret = sysfs_create_link(use->target->holders_dir, in add_usage_links()
258 &mod->mkobj.kobj, mod->name); in add_usage_links()
274 for (i = 0; (attr = &mod->modinfo_attrs[i]); i++) { in module_remove_modinfo_attrs()
277 /* pick a field to test for end of list */ in module_remove_modinfo_attrs()
278 if (!attr->attr.name) in module_remove_modinfo_attrs()
280 sysfs_remove_file(&mod->mkobj.kobj, &attr->attr); in module_remove_modinfo_attrs()
281 if (attr->free) in module_remove_modinfo_attrs()
282 attr->free(mod); in module_remove_modinfo_attrs()
284 kfree(mod->modinfo_attrs); in module_remove_modinfo_attrs()
294 mod->modinfo_attrs = kzalloc((sizeof(struct module_attribute) * in module_add_modinfo_attrs()
297 if (!mod->modinfo_attrs) in module_add_modinfo_attrs()
298 return -ENOMEM; in module_add_modinfo_attrs()
300 temp_attr = mod->modinfo_attrs; in module_add_modinfo_attrs()
302 if (!attr->test || attr->test(mod)) { in module_add_modinfo_attrs()
304 sysfs_attr_init(&temp_attr->attr); in module_add_modinfo_attrs()
305 error = sysfs_create_file(&mod->mkobj.kobj, in module_add_modinfo_attrs()
306 &temp_attr->attr); in module_add_modinfo_attrs()
317 module_remove_modinfo_attrs(mod, --i); in module_add_modinfo_attrs()
319 kfree(mod->modinfo_attrs); in module_add_modinfo_attrs()
327 mod->mkobj.kobj_completion = &c; in mod_kobject_put()
328 kobject_put(&mod->mkobj.kobj); in mod_kobject_put()
338 pr_err("%s: module sysfs not initialized\n", mod->name); in mod_sysfs_init()
339 err = -EINVAL; in mod_sysfs_init()
343 kobj = kset_find_obj(module_kset, mod->name); in mod_sysfs_init()
345 pr_err("%s: module is already loaded\n", mod->name); in mod_sysfs_init()
347 err = -EINVAL; in mod_sysfs_init()
351 mod->mkobj.mod = mod; in mod_sysfs_init()
353 memset(&mod->mkobj.kobj, 0, sizeof(mod->mkobj.kobj)); in mod_sysfs_init()
354 mod->mkobj.kobj.kset = module_kset; in mod_sysfs_init()
355 err = kobject_init_and_add(&mod->mkobj.kobj, &module_ktype, NULL, in mod_sysfs_init()
356 "%s", mod->name); in mod_sysfs_init()
375 mod->holders_dir = kobject_create_and_add("holders", &mod->mkobj.kobj); in mod_sysfs_setup()
376 if (!mod->holders_dir) { in mod_sysfs_setup()
377 err = -ENOMEM; in mod_sysfs_setup()
408 module_remove_modinfo_attrs(mod, -1); in mod_sysfs_setup()
412 kobject_put(mod->holders_dir); in mod_sysfs_setup()
429 module_remove_modinfo_attrs(mod, -1); in mod_sysfs_teardown()
431 kobject_put(mod->mkobj.drivers_dir); in mod_sysfs_teardown()
432 kobject_put(mod->holders_dir); in mod_sysfs_teardown()
438 mutex_init(&mod->param_lock); in init_param_lock()