Skip to content

Commit 29e1095

Browse files
t-8chJoelgranados
authored andcommitted
sysctl: move internal interfaces to const struct ctl_table
As a preparation to make all the core sysctl code work with const struct ctl_table switch over the internal function to use the const variant. Some pointers to "struct ctl_table" need to stay non-const as they are newly allocated and modified before registration. Signed-off-by: Thomas Weißschuh <[email protected]> Signed-off-by: Joel Granados <[email protected]>
1 parent 57e3707 commit 29e1095

File tree

3 files changed

+43
-42
lines changed

3 files changed

+43
-42
lines changed

fs/proc/internal.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ struct proc_inode {
102102
union proc_op op;
103103
struct proc_dir_entry *pde;
104104
struct ctl_table_header *sysctl;
105-
struct ctl_table *sysctl_entry;
105+
const struct ctl_table *sysctl_entry;
106106
struct hlist_node sibling_inodes;
107107
const struct proc_ns_operations *ns_ops;
108108
struct inode vfs_inode;

fs/proc/proc_sysctl.c

Lines changed: 41 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ static DEFINE_SPINLOCK(sysctl_lock);
8888

8989
static void drop_sysctl_table(struct ctl_table_header *header);
9090
static int sysctl_follow_link(struct ctl_table_header **phead,
91-
struct ctl_table **pentry);
91+
const struct ctl_table **pentry);
9292
static int insert_links(struct ctl_table_header *head);
9393
static void put_links(struct ctl_table_header *header);
9494

@@ -110,11 +110,11 @@ static int namecmp(const char *name1, int len1, const char *name2, int len2)
110110
}
111111

112112
/* Called under sysctl_lock */
113-
static struct ctl_table *find_entry(struct ctl_table_header **phead,
113+
static const struct ctl_table *find_entry(struct ctl_table_header **phead,
114114
struct ctl_dir *dir, const char *name, int namelen)
115115
{
116116
struct ctl_table_header *head;
117-
struct ctl_table *entry;
117+
const struct ctl_table *entry;
118118
struct rb_node *node = dir->root.rb_node;
119119

120120
while (node)
@@ -141,7 +141,7 @@ static struct ctl_table *find_entry(struct ctl_table_header **phead,
141141
return NULL;
142142
}
143143

144-
static int insert_entry(struct ctl_table_header *head, struct ctl_table *entry)
144+
static int insert_entry(struct ctl_table_header *head, const struct ctl_table *entry)
145145
{
146146
struct rb_node *node = &head->node[entry - head->ctl_table].node;
147147
struct rb_node **p = &head->parent->root.rb_node;
@@ -151,7 +151,7 @@ static int insert_entry(struct ctl_table_header *head, struct ctl_table *entry)
151151

152152
while (*p) {
153153
struct ctl_table_header *parent_head;
154-
struct ctl_table *parent_entry;
154+
const struct ctl_table *parent_entry;
155155
struct ctl_node *parent_node;
156156
const char *parent_name;
157157
int cmp;
@@ -180,7 +180,7 @@ static int insert_entry(struct ctl_table_header *head, struct ctl_table *entry)
180180
return 0;
181181
}
182182

183-
static void erase_entry(struct ctl_table_header *head, struct ctl_table *entry)
183+
static void erase_entry(struct ctl_table_header *head, const struct ctl_table *entry)
184184
{
185185
struct rb_node *node = &head->node[entry - head->ctl_table].node;
186186

@@ -189,7 +189,7 @@ static void erase_entry(struct ctl_table_header *head, struct ctl_table *entry)
189189

190190
static void init_header(struct ctl_table_header *head,
191191
struct ctl_table_root *root, struct ctl_table_set *set,
192-
struct ctl_node *node, struct ctl_table *table, size_t table_size)
192+
struct ctl_node *node, const struct ctl_table *table, size_t table_size)
193193
{
194194
head->ctl_table = table;
195195
head->ctl_table_size = table_size;
@@ -204,7 +204,7 @@ static void init_header(struct ctl_table_header *head,
204204
head->node = node;
205205
INIT_HLIST_HEAD(&head->inodes);
206206
if (node) {
207-
struct ctl_table *entry;
207+
const struct ctl_table *entry;
208208

209209
list_for_each_table_entry(entry, head) {
210210
node->header = head;
@@ -217,15 +217,15 @@ static void init_header(struct ctl_table_header *head,
217217

218218
static void erase_header(struct ctl_table_header *head)
219219
{
220-
struct ctl_table *entry;
220+
const struct ctl_table *entry;
221221

222222
list_for_each_table_entry(entry, head)
223223
erase_entry(head, entry);
224224
}
225225

226226
static int insert_header(struct ctl_dir *dir, struct ctl_table_header *header)
227227
{
228-
struct ctl_table *entry;
228+
const struct ctl_table *entry;
229229
struct ctl_table_header *dir_h = &dir->header;
230230
int err;
231231

@@ -344,12 +344,12 @@ lookup_header_set(struct ctl_table_root *root)
344344
return set;
345345
}
346346

347-
static struct ctl_table *lookup_entry(struct ctl_table_header **phead,
348-
struct ctl_dir *dir,
349-
const char *name, int namelen)
347+
static const struct ctl_table *lookup_entry(struct ctl_table_header **phead,
348+
struct ctl_dir *dir,
349+
const char *name, int namelen)
350350
{
351351
struct ctl_table_header *head;
352-
struct ctl_table *entry;
352+
const struct ctl_table *entry;
353353

354354
spin_lock(&sysctl_lock);
355355
entry = find_entry(&head, dir, name, namelen);
@@ -374,10 +374,10 @@ static struct ctl_node *first_usable_entry(struct rb_node *node)
374374
}
375375

376376
static void first_entry(struct ctl_dir *dir,
377-
struct ctl_table_header **phead, struct ctl_table **pentry)
377+
struct ctl_table_header **phead, const struct ctl_table **pentry)
378378
{
379379
struct ctl_table_header *head = NULL;
380-
struct ctl_table *entry = NULL;
380+
const struct ctl_table *entry = NULL;
381381
struct ctl_node *ctl_node;
382382

383383
spin_lock(&sysctl_lock);
@@ -391,10 +391,10 @@ static void first_entry(struct ctl_dir *dir,
391391
*pentry = entry;
392392
}
393393

394-
static void next_entry(struct ctl_table_header **phead, struct ctl_table **pentry)
394+
static void next_entry(struct ctl_table_header **phead, const struct ctl_table **pentry)
395395
{
396396
struct ctl_table_header *head = *phead;
397-
struct ctl_table *entry = *pentry;
397+
const struct ctl_table *entry = *pentry;
398398
struct ctl_node *ctl_node = &head->node[entry - head->ctl_table];
399399

400400
spin_lock(&sysctl_lock);
@@ -427,7 +427,7 @@ static int test_perm(int mode, int op)
427427
return -EACCES;
428428
}
429429

430-
static int sysctl_perm(struct ctl_table_header *head, struct ctl_table *table, int op)
430+
static int sysctl_perm(struct ctl_table_header *head, const struct ctl_table *table, int op)
431431
{
432432
struct ctl_table_root *root = head->root;
433433
int mode;
@@ -441,7 +441,7 @@ static int sysctl_perm(struct ctl_table_header *head, struct ctl_table *table, i
441441
}
442442

443443
static struct inode *proc_sys_make_inode(struct super_block *sb,
444-
struct ctl_table_header *head, struct ctl_table *table)
444+
struct ctl_table_header *head, const struct ctl_table *table)
445445
{
446446
struct ctl_table_root *root = head->root;
447447
struct inode *inode;
@@ -512,7 +512,7 @@ static struct dentry *proc_sys_lookup(struct inode *dir, struct dentry *dentry,
512512
struct ctl_table_header *head = grab_header(dir);
513513
struct ctl_table_header *h = NULL;
514514
const struct qstr *name = &dentry->d_name;
515-
struct ctl_table *p;
515+
const struct ctl_table *p;
516516
struct inode *inode;
517517
struct dentry *err = ERR_PTR(-ENOENT);
518518
struct ctl_dir *ctl_dir;
@@ -550,7 +550,7 @@ static ssize_t proc_sys_call_handler(struct kiocb *iocb, struct iov_iter *iter,
550550
{
551551
struct inode *inode = file_inode(iocb->ki_filp);
552552
struct ctl_table_header *head = grab_header(inode);
553-
struct ctl_table *table = PROC_I(inode)->sysctl_entry;
553+
const struct ctl_table *table = PROC_I(inode)->sysctl_entry;
554554
size_t count = iov_iter_count(iter);
555555
char *kbuf;
556556
ssize_t error;
@@ -624,7 +624,7 @@ static ssize_t proc_sys_write(struct kiocb *iocb, struct iov_iter *iter)
624624
static int proc_sys_open(struct inode *inode, struct file *filp)
625625
{
626626
struct ctl_table_header *head = grab_header(inode);
627-
struct ctl_table *table = PROC_I(inode)->sysctl_entry;
627+
const struct ctl_table *table = PROC_I(inode)->sysctl_entry;
628628

629629
/* sysctl was unregistered */
630630
if (IS_ERR(head))
@@ -642,7 +642,7 @@ static __poll_t proc_sys_poll(struct file *filp, poll_table *wait)
642642
{
643643
struct inode *inode = file_inode(filp);
644644
struct ctl_table_header *head = grab_header(inode);
645-
struct ctl_table *table = PROC_I(inode)->sysctl_entry;
645+
const struct ctl_table *table = PROC_I(inode)->sysctl_entry;
646646
__poll_t ret = DEFAULT_POLLMASK;
647647
unsigned long event;
648648

@@ -673,7 +673,7 @@ static __poll_t proc_sys_poll(struct file *filp, poll_table *wait)
673673
static bool proc_sys_fill_cache(struct file *file,
674674
struct dir_context *ctx,
675675
struct ctl_table_header *head,
676-
struct ctl_table *table)
676+
const struct ctl_table *table)
677677
{
678678
struct dentry *child, *dir = file->f_path.dentry;
679679
struct inode *inode;
@@ -717,7 +717,7 @@ static bool proc_sys_fill_cache(struct file *file,
717717
static bool proc_sys_link_fill_cache(struct file *file,
718718
struct dir_context *ctx,
719719
struct ctl_table_header *head,
720-
struct ctl_table *table)
720+
const struct ctl_table *table)
721721
{
722722
bool ret = true;
723723

@@ -735,7 +735,7 @@ static bool proc_sys_link_fill_cache(struct file *file,
735735
return ret;
736736
}
737737

738-
static int scan(struct ctl_table_header *head, struct ctl_table *table,
738+
static int scan(struct ctl_table_header *head, const struct ctl_table *table,
739739
unsigned long *pos, struct file *file,
740740
struct dir_context *ctx)
741741
{
@@ -759,7 +759,7 @@ static int proc_sys_readdir(struct file *file, struct dir_context *ctx)
759759
{
760760
struct ctl_table_header *head = grab_header(file_inode(file));
761761
struct ctl_table_header *h = NULL;
762-
struct ctl_table *entry;
762+
const struct ctl_table *entry;
763763
struct ctl_dir *ctl_dir;
764764
unsigned long pos;
765765

@@ -792,7 +792,7 @@ static int proc_sys_permission(struct mnt_idmap *idmap,
792792
* are _NOT_ writeable, capabilities or not.
793793
*/
794794
struct ctl_table_header *head;
795-
struct ctl_table *table;
795+
const struct ctl_table *table;
796796
int error;
797797

798798
/* Executable files are not allowed under /proc/sys/ */
@@ -836,7 +836,7 @@ static int proc_sys_getattr(struct mnt_idmap *idmap,
836836
{
837837
struct inode *inode = d_inode(path->dentry);
838838
struct ctl_table_header *head = grab_header(inode);
839-
struct ctl_table *table = PROC_I(inode)->sysctl_entry;
839+
const struct ctl_table *table = PROC_I(inode)->sysctl_entry;
840840

841841
if (IS_ERR(head))
842842
return PTR_ERR(head);
@@ -935,7 +935,7 @@ static struct ctl_dir *find_subdir(struct ctl_dir *dir,
935935
const char *name, int namelen)
936936
{
937937
struct ctl_table_header *head;
938-
struct ctl_table *entry;
938+
const struct ctl_table *entry;
939939

940940
entry = find_entry(&head, dir, name, namelen);
941941
if (!entry)
@@ -1046,12 +1046,12 @@ static struct ctl_dir *xlate_dir(struct ctl_table_set *set, struct ctl_dir *dir)
10461046
}
10471047

10481048
static int sysctl_follow_link(struct ctl_table_header **phead,
1049-
struct ctl_table **pentry)
1049+
const struct ctl_table **pentry)
10501050
{
10511051
struct ctl_table_header *head;
1052+
const struct ctl_table *entry;
10521053
struct ctl_table_root *root;
10531054
struct ctl_table_set *set;
1054-
struct ctl_table *entry;
10551055
struct ctl_dir *dir;
10561056
int ret;
10571057

@@ -1078,7 +1078,7 @@ static int sysctl_follow_link(struct ctl_table_header **phead,
10781078
return ret;
10791079
}
10801080

1081-
static int sysctl_err(const char *path, struct ctl_table *table, char *fmt, ...)
1081+
static int sysctl_err(const char *path, const struct ctl_table *table, char *fmt, ...)
10821082
{
10831083
struct va_format vaf;
10841084
va_list args;
@@ -1094,7 +1094,7 @@ static int sysctl_err(const char *path, struct ctl_table *table, char *fmt, ...)
10941094
return -EINVAL;
10951095
}
10961096

1097-
static int sysctl_check_table_array(const char *path, struct ctl_table *table)
1097+
static int sysctl_check_table_array(const char *path, const struct ctl_table *table)
10981098
{
10991099
unsigned int extra;
11001100
int err = 0;
@@ -1133,7 +1133,7 @@ static int sysctl_check_table_array(const char *path, struct ctl_table *table)
11331133

11341134
static int sysctl_check_table(const char *path, struct ctl_table_header *header)
11351135
{
1136-
struct ctl_table *entry;
1136+
const struct ctl_table *entry;
11371137
int err = 0;
11381138
list_for_each_table_entry(entry, header) {
11391139
if (!entry->procname)
@@ -1169,8 +1169,9 @@ static int sysctl_check_table(const char *path, struct ctl_table_header *header)
11691169

11701170
static struct ctl_table_header *new_links(struct ctl_dir *dir, struct ctl_table_header *head)
11711171
{
1172-
struct ctl_table *link_table, *entry, *link;
1172+
struct ctl_table *link_table, *link;
11731173
struct ctl_table_header *links;
1174+
const struct ctl_table *entry;
11741175
struct ctl_node *node;
11751176
char *link_name;
11761177
int name_bytes;
@@ -1215,7 +1216,7 @@ static bool get_links(struct ctl_dir *dir,
12151216
struct ctl_table_root *link_root)
12161217
{
12171218
struct ctl_table_header *tmp_head;
1218-
struct ctl_table *entry, *link;
1219+
const struct ctl_table *entry, *link;
12191220

12201221
if (header->ctl_table_size == 0 ||
12211222
sysctl_is_perm_empty_ctl_header(header))
@@ -1466,7 +1467,7 @@ static void put_links(struct ctl_table_header *header)
14661467
struct ctl_table_root *root = header->root;
14671468
struct ctl_dir *parent = header->parent;
14681469
struct ctl_dir *core_parent;
1469-
struct ctl_table *entry;
1470+
const struct ctl_table *entry;
14701471

14711472
if (header->set == root_set)
14721473
return;
@@ -1477,7 +1478,7 @@ static void put_links(struct ctl_table_header *header)
14771478

14781479
list_for_each_table_entry(entry, header) {
14791480
struct ctl_table_header *link_head;
1480-
struct ctl_table *link;
1481+
const struct ctl_table *link;
14811482
const char *name = entry->procname;
14821483

14831484
link = find_entry(&link_head, core_parent, name, strlen(name));

include/linux/sysctl.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ struct ctl_node {
162162
struct ctl_table_header {
163163
union {
164164
struct {
165-
struct ctl_table *ctl_table;
165+
const struct ctl_table *ctl_table;
166166
int ctl_table_size;
167167
int used;
168168
int count;

0 commit comments

Comments
 (0)