Re: [PATCH] CIFS: Fix kernel crash on simultaneous mount/umount calls

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>  static void
>  cifs_put_super(struct super_block *sb)
>  {
> +	struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
> +	if (cifs_sb == NULL) {
> +		cFYI(1, "Empty cifs superblock info passed to put_super");
> +		return;
> +	}
> +
> +	bdi_destroy(&cifs_sb->bdi);

This means you have a problem with the lifetime rules in cifs_do_mount.

The VFS only calls ->put_super if sb->s_root is set.  So the rules for
the mount handler are to only set s_root once the superblock is fully
set up.

Also you should never call cifs_umount from the error handling in
cifs_do_mount.  Until s_root is set, please unwind manually, after
that leave it to ->put_super.


> +
> +static void
> +cifs_kill_super(struct super_block *sb)
> +{

This also seems quite broken.  If you fix up the mount path like
I suggested it won't be nessecary.

>  	int rc = 0;
>  	struct cifs_sb_info *cifs_sb;
>  
>  	cFYI(1, "In cifs_put_super");
>  	cifs_sb = CIFS_SB(sb);
>  	if (cifs_sb == NULL) {

And this check should also be removed.

--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux