lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Fri, 15 Dec 2023 05:56:28 +0000
From: Matthew Wilcox <willy@...radead.org>
To: Vishal Verma <vishal.l.verma@...el.com>
Cc: Dan Williams <dan.j.williams@...el.com>,
	Dave Jiang <dave.jiang@...el.com>,
	Andrew Morton <akpm@...ux-foundation.org>,
	Oscar Salvador <osalvador@...e.de>, linux-kernel@...r.kernel.org,
	nvdimm@...ts.linux.dev, linux-cxl@...r.kernel.org,
	David Hildenbrand <david@...hat.com>,
	Dave Hansen <dave.hansen@...ux.intel.com>,
	Huang Ying <ying.huang@...el.com>,
	Greg Kroah-Hartman <gregkh@...uxfoundation.org>, linux-mm@...ck.org,
	Joao Martins <joao.m.martins@...cle.com>
Subject: Re: [PATCH v6 2/4] dax/bus: Use guard(device) in sysfs attribute
 helpers

On Thu, Dec 14, 2023 at 10:25:27PM -0700, Vishal Verma wrote:
> @@ -294,13 +294,10 @@ static ssize_t available_size_show(struct device *dev,
>  		struct device_attribute *attr, char *buf)
>  {
>  	struct dax_region *dax_region = dev_get_drvdata(dev);
> -	unsigned long long size;
>  
> -	device_lock(dev);
> -	size = dax_region_avail_size(dax_region);
> -	device_unlock(dev);
> +	guard(device)(dev);
>  
> -	return sprintf(buf, "%llu\n", size);
> +	return sprintf(buf, "%llu\n", dax_region_avail_size(dax_region));
>  }

Is this an appropriate use of guard()?  sprintf is not the fastest of
functions, so we will end up holding the device_lock for longer than
we used to.

> @@ -908,9 +890,8 @@ static ssize_t size_show(struct device *dev,
>  	struct dev_dax *dev_dax = to_dev_dax(dev);
>  	unsigned long long size;
>  
> -	device_lock(dev);
> +	guard(device)(dev);
>  	size = dev_dax_size(dev_dax);
> -	device_unlock(dev);
>  
>  	return sprintf(buf, "%llu\n", size);
>  }

If it is appropriate, then you can do without the 'size' variable here.

> @@ -1137,21 +1117,20 @@ static ssize_t mapping_store(struct device *dev, struct device_attribute *attr,
>  	if (rc)
>  		return rc;
>  
> -	rc = -ENXIO;
> -	device_lock(dax_region->dev);
> -	if (!dax_region->dev->driver) {
> -		device_unlock(dax_region->dev);
> -		return rc;
> -	}
> -	device_lock(dev);
> +	guard(device)(dax_region->dev);
> +	if (!dax_region->dev->driver)
> +		return -ENXIO;
>  
> +	guard(device)(dev);
>  	to_alloc = range_len(&r);
> -	if (alloc_is_aligned(dev_dax, to_alloc))
> -		rc = alloc_dev_dax_range(dev_dax, r.start, to_alloc);
> -	device_unlock(dev);
> -	device_unlock(dax_region->dev);
> +	if (!alloc_is_aligned(dev_dax, to_alloc))
> +		return -ENXIO;
>  
> -	return rc == 0 ? len : rc;
> +	rc = alloc_dev_dax_range(dev_dax, r.start, to_alloc);
> +	if (rc)
> +		return rc;
> +
> +	return len;
>  }

Have I mentioned how much I hate the "rc" naming convention?  It tells
you nothing useful about the contents of the variable.  If you called it
'err', I'd know it was an error, and then the end of this function would
make sense.

	if (err)
		return err;
	return len;


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ