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] [day] [month] [year] [list]
Date:   Thu, 9 Jul 2020 09:25:15 +0200
From:   Enric Balletbo i Serra <enric.balletbo@...labora.com>
To:     Eizan Miyamoto <eizan@...omium.org>,
        LKML <linux-kernel@...r.kernel.org>
Cc:     Benson Leung <bleung@...omium.org>,
        Guenter Roeck <groeck@...omium.org>,
        Gwendal Grignou <gwendal@...omium.org>
Subject: Re: [PATCH v1] platform/chrome: cros_ec_debugfs: conditionally create
 uptime node

Hi Eizan,

Thank you for your patch

On 8/7/20 6:53, Eizan Miyamoto wrote:
> Before creating an 'uptime' node in debugfs, this change adds a check to
> see if a EC_CMD_GET_UPTIME_INFO command can be successfully run.
> 
> If the uptime node is created, userspace programs may periodically poll
> it (e.g., timberslide), causing commands to be sent to the EC each time.
> If the EC doesn't support EC_CMD_GET_UPTIME_INFO, an error will be
> emitted in the EC console, producing noise.
> 

A similar patch with the same purpose sent by Gwendal was already accepted and
queued for 5.9. See [1].


Thanks,
 Enric

[1]
https://git.kernel.org/pub/scm/linux/kernel/git/chrome-platform/linux.git/commit/?h=for-next&id=d378cdd0113878e3860f954d16dd3e91defb1492



> Signed-off-by: Eizan Miyamoto <eizan@...omium.org>
> ---
> 
>  drivers/platform/chrome/cros_ec_debugfs.c | 35 +++++++++++++++++------
>  1 file changed, 26 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/platform/chrome/cros_ec_debugfs.c b/drivers/platform/chrome/cros_ec_debugfs.c
> index ecfada00e6c51..8708fe12f8ca8 100644
> --- a/drivers/platform/chrome/cros_ec_debugfs.c
> +++ b/drivers/platform/chrome/cros_ec_debugfs.c
> @@ -242,17 +242,14 @@ static ssize_t cros_ec_pdinfo_read(struct file *file,
>  				       read_buf, p - read_buf);
>  }
>  
> -static ssize_t cros_ec_uptime_read(struct file *file, char __user *user_buf,
> -				   size_t count, loff_t *ppos)
> +static int cros_ec_get_uptime(struct cros_ec_device *ec_dev,
> +			      uint32_t *uptime)
>  {
> -	struct cros_ec_debugfs *debug_info = file->private_data;
> -	struct cros_ec_device *ec_dev = debug_info->ec->ec_dev;
>  	struct {
>  		struct cros_ec_command cmd;
>  		struct ec_response_uptime_info resp;
>  	} __packed msg = {};
>  	struct ec_response_uptime_info *resp;
> -	char read_buf[32];
>  	int ret;
>  
>  	resp = (struct ec_response_uptime_info *)&msg.resp;
> @@ -264,8 +261,24 @@ static ssize_t cros_ec_uptime_read(struct file *file, char __user *user_buf,
>  	if (ret < 0)
>  		return ret;
>  
> -	ret = scnprintf(read_buf, sizeof(read_buf), "%u\n",
> -			resp->time_since_ec_boot_ms);
> +	*uptime = resp->time_since_ec_boot_ms;
> +	return 0;
> +}
> +
> +static ssize_t cros_ec_uptime_read(struct file *file, char __user *user_buf,
> +				   size_t count, loff_t *ppos)
> +{
> +	struct cros_ec_debugfs *debug_info = file->private_data;
> +	struct cros_ec_device *ec_dev = debug_info->ec->ec_dev;
> +	char read_buf[32];
> +	int ret;
> +	uint32_t uptime;
> +
> +	ret = cros_ec_get_uptime(ec_dev, &uptime);
> +	if (ret < 0)
> +		return ret;
> +
> +	ret = scnprintf(read_buf, sizeof(read_buf), "%u\n", uptime);
>  
>  	return simple_read_from_buffer(user_buf, count, ppos, read_buf, ret);
>  }
> @@ -425,6 +438,7 @@ static int cros_ec_debugfs_probe(struct platform_device *pd)
>  	const char *name = ec_platform->ec_name;
>  	struct cros_ec_debugfs *debug_info;
>  	int ret;
> +	uint32_t uptime;
>  
>  	debug_info = devm_kzalloc(ec->dev, sizeof(*debug_info), GFP_KERNEL);
>  	if (!debug_info)
> @@ -444,8 +458,11 @@ static int cros_ec_debugfs_probe(struct platform_device *pd)
>  	debugfs_create_file("pdinfo", 0444, debug_info->dir, debug_info,
>  			    &cros_ec_pdinfo_fops);
>  
> -	debugfs_create_file("uptime", 0444, debug_info->dir, debug_info,
> -			    &cros_ec_uptime_fops);
> +	if (cros_ec_get_uptime(debug_info->ec->ec_dev, &uptime) >= 0)
> +		debugfs_create_file("uptime", 0444, debug_info->dir, debug_info,
> +				    &cros_ec_uptime_fops);
> +	else
> +		dev_dbg(ec->dev, "EC does not provide uptime");
>  
>  	debugfs_create_x32("last_resume_result", 0444, debug_info->dir,
>  			   &ec->ec_dev->last_resume_result);
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ