Skip to contentSkip to conversation

sysctl: register only tables of sysctl files

DISCUSSION Dan Carpenter 1 participant 2 messages Jan 30, 2012

lore
Share & tools
lore
#0 lore raw

Hi Eric,

The patch f728019bb72e: "sysctl: register only tables of sysctl files" from Jan 22, 2012, has a weird thing going on and I don't know how to fix it:

+ if (nr_dirs && nr_files) {
+ struct ctl_table *new;
+ files = kzalloc(sizeof(struct ctl_table) * (nr_files + 1),
+ GFP_KERNEL);
+ if (!files)
+ goto out;
+
+ ctl_table_arg = files;
+ for (new = files, entry = table; entry->procname; entry++) {
+ if (entry->child)
+ continue;
+ *new = *entry;
+ new++;
+ }
+ }
+
+ /* Register everything except a directory full of subdirectories */
+ if (nr_files || !nr_dirs) {

+               struct ctl_table_header *header;
+               header = __register_sysctl_table(root, namespaces, path, files);
+               if (!header) {
+                       kfree(ctl_table_arg);
                              ^^^^^^^^^^^^^

+ goto out;
+ }
+
+ /* Remember if we need to free the file table */

+               header->ctl_table_arg = ctl_table_arg;
                                        ^^^^^^^^^^^^^

These are NULL unless "nr_dirs" is non-zero (so it's always NULL here).

+ **subheader = header;
+ (*subheader)++;
+ }

regards,
dan carpenter

#1 lore raw

Review

Quoted 2 lines · Dan Carpenter
(quoted diff) +2 -0
+       /* Register everything except a directory full of subdirectories */
+       if (nr_files || !nr_dirs) {

Crap... Forget about this. For some reason I missed that his was an OR, not an AND. Sorry for the noise.

regards,
dan carpenter