Re: [PATCH 2/2] Consolidate and extract similar DFS referral expansion code in cifs_mount

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

 



Hi Jeff,

On Fri, Mar 25, 2011 at 04:51:10PM -0400, Jeff Layton wrote:
> Not that I'm trying to give you more work to do, but I think it would
> have meant less code churn to break the existing code out into a
> separate function first, and then add the new call site to this
> function second. It certainly would make this easier to review...

I thought about that afterwards, actually, but (a) Since I'm not familiar with
the codebase I had to attack the problem from the other direction (I
wasn't sure what to split out without having the duplicate code to look
over) and (b) I was on the bus by the time I thought about that, meaning
it would have to wait until today :)

If it's a big problem let me know and I'll re-re-factor.

> > +	/* For DFS paths, skip the first '\' of the UNC */
> > +	ref_path = (check_prefix)?(full_path + 1):(volume_info->UNC + 1);
> > +
> 
> No need for extra parenthesis here. You should run this through
> scripts/checkpatch.pl and fix the style warnings.

Will do.

> > -			if (mount_data != mount_data_global)
> > -				kfree(mount_data);
> > -
> > -			mount_data = cifs_compose_mount_options(
> > -					cifs_sb->mountdata, full_path + 1,
> > -					referrals, &fake_devname);
> > -
> > -			free_dfs_info_array(referrals, num_referrals);
> > -			kfree(fake_devname);
> > -			kfree(full_path);
> >  
> > -			if (IS_ERR(mount_data)) {
> > -				rc = PTR_ERR(mount_data);
> > -				mount_data = NULL;
> > -				goto mount_fail_check;
> > -			}
> > +		if (mount_data != mount_data_global)
> > +			kfree(mount_data);
> >  
> 
> Problem: suppose mount_data != mount_data_global. You kfree it here but
> the pointer is still the same. Now you call expand_dfs_referral and
> let's suppose that get_dfs_path returns an error. We eventually find
> our way to the bottom of the function and free the pointer again.
> 
> This is not your fault of course, but rather due to the fact that this
> mount_data/mount_data_global thing is completely fubar. Since you're in
> here anyway, care to see about cleaning that up? It seems like there
> has to be a less error prone way to handle that stuff.

Yeah I'll take a look.  I'll poke you on IRC if I have any questions.


	sean
--
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