[PATCH 4/4] efi_runtime: Do not pass user addresses to firmware

Matt Fleming matt at console-pimps.org
Fri Apr 4 09:46:40 UTC 2014


On Fri, 04 Apr, at 10:18:24AM, Borislav Petkov wrote:
> 
> Just to show what I mean when we were talking on IRC: Since the caller
> needs to free *dst, the comment over the function should state that, the
> very least.
 
Yeah, that's a good point as the calling is asymmetric wrt memory
allocation.

> Then, we probably could call those functions something like
> copy_uc2_to_user() and so on, to state that we're shuffling data to and
> fro userspace and have the get/put_ucs2 names for allocating/freeing
> buffers.

Another good idea, although I'm not keen on having a simple wrapper
around kfree() just to maintain symmetry. I do think the name changes
make sense though, but I'm happy to leave the kfree() stuff and simply
delete put_ucs2(), otherwise you get stuff like this,

In hindsight, get_* and put_* imply some kind of reference counting or
automatic alloc/free. I was really just trying to mirror put_user() and
get_user().

>  	data = kmalloc(datasize, GFP_KERNEL);
>  	if (copy_from_user(data, psetvariable->Data, datasize)) {
> -		kfree(name);
> +		put_ucs2(name);
>  		return -EFAULT;
>  	}
>  
>  	status = efi.set_variable(name, &vendor, attr, datasize, data);
>  
>  	kfree(data);
> -	kfree(name);
> +	put_ucs2(name);

where 'name' looks special in some way, but it's really not.

Colin, would you like me to send out a v2 with the improved comments,
deleted put_ucs2() (since it's unused) and improved naming convention?

-- 
Matt Fleming, Intel Open Source Technology Center



More information about the fwts-devel mailing list