Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a2ed0b39 authored by Jan Kara's avatar Jan Kara
Browse files

isofs: Do not return EACCES for unknown filesystems



When isofs_mount() is called to mount a device read-write, it returns
EACCES even before it checks that the device actually contains an isofs
filesystem. This may confuse mount(8) which then tries to mount all
subsequent filesystem types in read-only mode.

Fix the problem by returning EACCES only once we verify that the device
indeed contains an iso9660 filesystem.

CC: stable@vger.kernel.org
Fixes: 17b7f7cf
Reported-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
Reported-by: default avatarKarel Zak <kzak@redhat.com>
Signed-off-by: default avatarJan Kara <jack@suse.cz>
parent 1573d2ca
Loading
Loading
Loading
Loading
+5 −3
Original line number Original line Diff line number Diff line
@@ -687,6 +687,11 @@ static int isofs_fill_super(struct super_block *s, void *data, int silent)
	pri_bh = NULL;
	pri_bh = NULL;


root_found:
root_found:
	/* We don't support read-write mounts */
	if (!(s->s_flags & MS_RDONLY)) {
		error = -EACCES;
		goto out_freebh;
	}


	if (joliet_level && (pri == NULL || !opt.rock)) {
	if (joliet_level && (pri == NULL || !opt.rock)) {
		/* This is the case of Joliet with the norock mount flag.
		/* This is the case of Joliet with the norock mount flag.
@@ -1501,9 +1506,6 @@ struct inode *__isofs_iget(struct super_block *sb,
static struct dentry *isofs_mount(struct file_system_type *fs_type,
static struct dentry *isofs_mount(struct file_system_type *fs_type,
	int flags, const char *dev_name, void *data)
	int flags, const char *dev_name, void *data)
{
{
	/* We don't support read-write mounts */
	if (!(flags & MS_RDONLY))
		return ERR_PTR(-EACCES);
	return mount_bdev(fs_type, flags, dev_name, data, isofs_fill_super);
	return mount_bdev(fs_type, flags, dev_name, data, isofs_fill_super);
}
}