1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright 1997-1998 Transmeta Corporation -- All Rights Reserved
4 * Copyright 2005-2006 Ian Kent <raven@themaw.net>
7 #include <linux/seq_file.h>
8 #include <linux/pagemap.h>
12 struct autofs_info
*autofs_new_ino(struct autofs_sb_info
*sbi
)
14 struct autofs_info
*ino
;
16 ino
= kzalloc(sizeof(*ino
), GFP_KERNEL
);
18 INIT_LIST_HEAD(&ino
->active
);
19 INIT_LIST_HEAD(&ino
->expiring
);
20 ino
->last_used
= jiffies
;
22 ino
->exp_timeout
= -1;
28 void autofs_clean_ino(struct autofs_info
*ino
)
30 ino
->uid
= GLOBAL_ROOT_UID
;
31 ino
->gid
= GLOBAL_ROOT_GID
;
32 ino
->exp_timeout
= -1;
33 ino
->last_used
= jiffies
;
36 void autofs_free_ino(struct autofs_info
*ino
)
41 void autofs_kill_sb(struct super_block
*sb
)
43 struct autofs_sb_info
*sbi
= autofs_sbi(sb
);
46 * In the event of a failure in get_sb_nodev the superblock
47 * info is not present so nothing else has been setup, so
48 * just call kill_anon_super when we are called from
52 /* Free wait queues, close pipe */
53 autofs_catatonic_mode(sbi
);
54 put_pid(sbi
->oz_pgrp
);
57 pr_debug("shutting down\n");
58 kill_litter_super(sb
);
63 static int autofs_show_options(struct seq_file
*m
, struct dentry
*root
)
65 struct autofs_sb_info
*sbi
= autofs_sbi(root
->d_sb
);
66 struct inode
*root_inode
= d_inode(root
->d_sb
->s_root
);
71 seq_printf(m
, ",fd=%d", sbi
->pipefd
);
72 if (!uid_eq(root_inode
->i_uid
, GLOBAL_ROOT_UID
))
73 seq_printf(m
, ",uid=%u",
74 from_kuid_munged(&init_user_ns
, root_inode
->i_uid
));
75 if (!gid_eq(root_inode
->i_gid
, GLOBAL_ROOT_GID
))
76 seq_printf(m
, ",gid=%u",
77 from_kgid_munged(&init_user_ns
, root_inode
->i_gid
));
78 seq_printf(m
, ",pgrp=%d", pid_vnr(sbi
->oz_pgrp
));
79 seq_printf(m
, ",timeout=%lu", sbi
->exp_timeout
/HZ
);
80 seq_printf(m
, ",minproto=%d", sbi
->min_proto
);
81 seq_printf(m
, ",maxproto=%d", sbi
->max_proto
);
83 if (autofs_type_offset(sbi
->type
))
84 seq_puts(m
, ",offset");
85 else if (autofs_type_direct(sbi
->type
))
86 seq_puts(m
, ",direct");
88 seq_puts(m
, ",indirect");
89 if (sbi
->flags
& AUTOFS_SBI_STRICTEXPIRE
)
90 seq_puts(m
, ",strictexpire");
91 if (sbi
->flags
& AUTOFS_SBI_IGNORE
)
92 seq_puts(m
, ",ignore");
93 #ifdef CONFIG_CHECKPOINT_RESTORE
95 seq_printf(m
, ",pipe_ino=%ld", file_inode(sbi
->pipe
)->i_ino
);
97 seq_puts(m
, ",pipe_ino=-1");
102 static void autofs_evict_inode(struct inode
*inode
)
105 kfree(inode
->i_private
);
108 static const struct super_operations autofs_sops
= {
109 .statfs
= simple_statfs
,
110 .show_options
= autofs_show_options
,
111 .evict_inode
= autofs_evict_inode
,
128 const struct fs_parameter_spec autofs_param_specs
[] = {
129 fsparam_flag ("direct", Opt_direct
),
130 fsparam_fd ("fd", Opt_fd
),
131 fsparam_gid ("gid", Opt_gid
),
132 fsparam_flag ("ignore", Opt_ignore
),
133 fsparam_flag ("indirect", Opt_indirect
),
134 fsparam_u32 ("maxproto", Opt_maxproto
),
135 fsparam_u32 ("minproto", Opt_minproto
),
136 fsparam_flag ("offset", Opt_offset
),
137 fsparam_u32 ("pgrp", Opt_pgrp
),
138 fsparam_flag ("strictexpire", Opt_strictexpire
),
139 fsparam_uid ("uid", Opt_uid
),
143 struct autofs_fs_context
{
151 * Open the fd. We do it here rather than in get_tree so that it's done in the
152 * context of the system call that passed the data and not the one that
153 * triggered the superblock creation, lest the fd gets reassigned.
155 static int autofs_parse_fd(struct fs_context
*fc
, struct autofs_sb_info
*sbi
,
156 struct fs_parameter
*param
,
157 struct fs_parse_result
*result
)
162 if (param
->type
== fs_value_is_file
) {
163 /* came through the new api */
167 pipe
= fget(result
->uint_32
);
170 errorf(fc
, "could not open pipe file descriptor");
174 ret
= autofs_check_pipe(pipe
);
176 errorf(fc
, "Invalid/unusable pipe");
181 autofs_set_packet_pipe_flags(pipe
);
186 sbi
->pipefd
= result
->uint_32
;
192 static int autofs_parse_param(struct fs_context
*fc
, struct fs_parameter
*param
)
194 struct autofs_fs_context
*ctx
= fc
->fs_private
;
195 struct autofs_sb_info
*sbi
= fc
->s_fs_info
;
196 struct fs_parse_result result
;
199 opt
= fs_parse(fc
, autofs_param_specs
, param
, &result
);
205 return autofs_parse_fd(fc
, sbi
, param
, &result
);
207 ctx
->uid
= result
.uid
;
210 ctx
->gid
= result
.gid
;
213 ctx
->pgrp
= result
.uint_32
;
214 ctx
->pgrp_set
= true;
217 sbi
->min_proto
= result
.uint_32
;
220 sbi
->max_proto
= result
.uint_32
;
223 set_autofs_type_indirect(&sbi
->type
);
226 set_autofs_type_direct(&sbi
->type
);
229 set_autofs_type_offset(&sbi
->type
);
231 case Opt_strictexpire
:
232 sbi
->flags
|= AUTOFS_SBI_STRICTEXPIRE
;
235 sbi
->flags
|= AUTOFS_SBI_IGNORE
;
241 static struct autofs_sb_info
*autofs_alloc_sbi(void)
243 struct autofs_sb_info
*sbi
;
245 sbi
= kzalloc(sizeof(*sbi
), GFP_KERNEL
);
249 sbi
->magic
= AUTOFS_SBI_MAGIC
;
250 sbi
->flags
= AUTOFS_SBI_CATATONIC
;
251 sbi
->min_proto
= AUTOFS_MIN_PROTO_VERSION
;
252 sbi
->max_proto
= AUTOFS_MAX_PROTO_VERSION
;
255 set_autofs_type_indirect(&sbi
->type
);
256 mutex_init(&sbi
->wq_mutex
);
257 mutex_init(&sbi
->pipe_mutex
);
258 spin_lock_init(&sbi
->fs_lock
);
259 spin_lock_init(&sbi
->lookup_lock
);
260 INIT_LIST_HEAD(&sbi
->active_list
);
261 INIT_LIST_HEAD(&sbi
->expiring_list
);
266 static int autofs_validate_protocol(struct fs_context
*fc
)
268 struct autofs_sb_info
*sbi
= fc
->s_fs_info
;
270 /* Test versions first */
271 if (sbi
->max_proto
< AUTOFS_MIN_PROTO_VERSION
||
272 sbi
->min_proto
> AUTOFS_MAX_PROTO_VERSION
) {
273 errorf(fc
, "kernel does not match daemon version "
274 "daemon (%d, %d) kernel (%d, %d)\n",
275 sbi
->min_proto
, sbi
->max_proto
,
276 AUTOFS_MIN_PROTO_VERSION
, AUTOFS_MAX_PROTO_VERSION
);
280 /* Establish highest kernel protocol version */
281 if (sbi
->max_proto
> AUTOFS_MAX_PROTO_VERSION
)
282 sbi
->version
= AUTOFS_MAX_PROTO_VERSION
;
284 sbi
->version
= sbi
->max_proto
;
286 switch (sbi
->version
) {
288 sbi
->sub_version
= 7;
291 sbi
->sub_version
= AUTOFS_PROTO_SUBVERSION
;
294 sbi
->sub_version
= 0;
300 static int autofs_fill_super(struct super_block
*s
, struct fs_context
*fc
)
302 struct autofs_fs_context
*ctx
= fc
->fs_private
;
303 struct autofs_sb_info
*sbi
= s
->s_fs_info
;
304 struct inode
*root_inode
;
305 struct autofs_info
*ino
;
307 pr_debug("starting up, sbi = %p\n", sbi
);
310 s
->s_blocksize
= 1024;
311 s
->s_blocksize_bits
= 10;
312 s
->s_magic
= AUTOFS_SUPER_MAGIC
;
313 s
->s_op
= &autofs_sops
;
314 s
->s_d_op
= &autofs_dentry_operations
;
318 * Get the root inode and dentry, but defer checking for errors.
320 ino
= autofs_new_ino(sbi
);
324 root_inode
= autofs_get_inode(s
, S_IFDIR
| 0755);
328 root_inode
->i_uid
= ctx
->uid
;
329 root_inode
->i_gid
= ctx
->gid
;
330 root_inode
->i_fop
= &autofs_root_operations
;
331 root_inode
->i_op
= &autofs_dir_inode_operations
;
333 s
->s_root
= d_make_root(root_inode
);
334 if (unlikely(!s
->s_root
)) {
335 autofs_free_ino(ino
);
338 s
->s_root
->d_fsdata
= ino
;
341 sbi
->oz_pgrp
= find_get_pid(ctx
->pgrp
);
343 return invalf(fc
, "Could not find process group %d",
346 sbi
->oz_pgrp
= get_task_pid(current
, PIDTYPE_PGID
);
348 if (autofs_type_trigger(sbi
->type
))
349 /* s->s_root won't be contended so there's little to
350 * be gained by not taking the d_lock when setting
351 * d_flags, even when a lot mounts are being done.
353 managed_dentry_set_managed(s
->s_root
);
355 pr_debug("pipe fd = %d, pgrp = %u\n",
356 sbi
->pipefd
, pid_nr(sbi
->oz_pgrp
));
358 sbi
->flags
&= ~AUTOFS_SBI_CATATONIC
;
363 * Validate the parameters and then request a superblock.
365 static int autofs_get_tree(struct fs_context
*fc
)
367 struct autofs_sb_info
*sbi
= fc
->s_fs_info
;
370 ret
= autofs_validate_protocol(fc
);
375 return invalf(fc
, "No control pipe specified");
377 return get_tree_nodev(fc
, autofs_fill_super
);
380 static void autofs_free_fc(struct fs_context
*fc
)
382 struct autofs_fs_context
*ctx
= fc
->fs_private
;
383 struct autofs_sb_info
*sbi
= fc
->s_fs_info
;
393 static const struct fs_context_operations autofs_context_ops
= {
394 .free
= autofs_free_fc
,
395 .parse_param
= autofs_parse_param
,
396 .get_tree
= autofs_get_tree
,
400 * Set up the filesystem mount context.
402 int autofs_init_fs_context(struct fs_context
*fc
)
404 struct autofs_fs_context
*ctx
;
405 struct autofs_sb_info
*sbi
;
407 ctx
= kzalloc(sizeof(struct autofs_fs_context
), GFP_KERNEL
);
411 ctx
->uid
= current_uid();
412 ctx
->gid
= current_gid();
414 sbi
= autofs_alloc_sbi();
418 fc
->fs_private
= ctx
;
420 fc
->ops
= &autofs_context_ops
;
429 struct inode
*autofs_get_inode(struct super_block
*sb
, umode_t mode
)
431 struct inode
*inode
= new_inode(sb
);
436 inode
->i_mode
= mode
;
438 inode
->i_uid
= d_inode(sb
->s_root
)->i_uid
;
439 inode
->i_gid
= d_inode(sb
->s_root
)->i_gid
;
441 simple_inode_init_ts(inode
);
442 inode
->i_ino
= get_next_ino();
446 inode
->i_op
= &autofs_dir_inode_operations
;
447 inode
->i_fop
= &autofs_dir_operations
;
448 } else if (S_ISLNK(mode
)) {
449 inode
->i_op
= &autofs_symlink_inode_operations
;