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:	Wed, 30 Nov 2011 15:15:51 -0800
From:	Andrew Morton <akpm@...ux-foundation.org>
To:	Daniel Drake <dsd@...top.org>
Cc:	x86@...nel.org, mingo@...hat.com, hpa@...or.com,
	tglx@...utronix.de, dilinger@...ued.net,
	linux-kernel@...r.kernel.org, linux-acpi@...r.kernel.org
Subject: Re: [PATCH resend 2] x86, olpc-xo15-sci: Enable lid close wakeup
 control through sysfs

On Tue, 29 Nov 2011 22:24:47 +0000 (GMT)
Daniel Drake <dsd@...top.org> wrote:

> Like most systems, OLPC's ACPI LID switch wakes up the system when the
> lid is opened, but not when it is closed.
> 
> Under OLPC's opportunistic suspend model, the lid may be closed while
> the system was oportunistically suspended with the screen running.
> In this event, we want to wake up to turn the screen off.
> 
> Enable control of normal ACPI wakeups through lid close events through
> a new sysfs attribute "lid_wake_on_closed". When set, and when
> LID wakeups are enabled through ACPI, the system will wake up on both
> open and close lid events.
> 
> Signed-off-by: Daniel Drake <dsd@...top.org>
> ---
>  arch/x86/platform/olpc/olpc-xo15-sci.c |   55 ++++++++++++++++++++++++++++++++
>  1 files changed, 55 insertions(+), 0 deletions(-)
> 
> Resending after 6 weeks with no feedback.
> 
> diff --git a/arch/x86/platform/olpc/olpc-xo15-sci.c b/arch/x86/platform/olpc/olpc-xo15-sci.c
> index 2b235b7..649230c 100644
> --- a/arch/x86/platform/olpc/olpc-xo15-sci.c
> +++ b/arch/x86/platform/olpc/olpc-xo15-sci.c
> @@ -24,6 +24,50 @@
>  #define XO15_SCI_DEVICE_NAME		"OLPC XO-1.5 SCI"
>  
>  static unsigned long xo15_sci_gpe;
> +static bool lid_wake_on_close;

I'd have thought that a few code comments which describe what all this
is doing wouldn't hurt.  Oh well.

> +static int set_lid_wake_behavior(bool wake_on_close)
> +{
> +	struct acpi_object_list arg_list;
> +	union acpi_object arg;
> +	acpi_status status;
> +
> +	arg_list.count = 1;
> +	arg_list.pointer = &arg;
> +	arg.type = ACPI_TYPE_INTEGER;
> +	arg.integer.value = wake_on_close;
> +	status = acpi_evaluate_object(NULL, "\\_SB.PCI0.LID.LIDW", &arg_list,
> +				      NULL);
> +	if (ACPI_FAILURE(status)) {
> +		pr_warning(PFX "failed to set lid behaviour\n");
> +		return 1;
> +	}
> +
> +	lid_wake_on_close = wake_on_close;
> +	return 0;
> +}
> +
> +static ssize_t lid_wake_on_close_show(struct kobject *s,
> +				      struct kobj_attribute *attr, char *buf)
> +{
> +	return sprintf(buf, "%u\n", lid_wake_on_close);
> +}
> +
> +static ssize_t lid_wake_on_close_store(struct kobject *s,
> +				       struct kobj_attribute *attr,
> +				       const char *buf, size_t n)
> +{
> +	unsigned int val;
> +	if (!sscanf(buf, "%u", &val) == 1)
> +		return -EINVAL;
> +
> +	set_lid_wake_behavior(!!val);
> +	return n;
> +}

Let me fix that for you.

--- a/arch/x86/platform/olpc/olpc-xo15-sci.c~x86-olpc-xo15-sci-enable-lid-close-wakeup-control-through-sysfs-fix
+++ a/arch/x86/platform/olpc/olpc-xo15-sci.c
@@ -58,7 +58,8 @@ static ssize_t lid_wake_on_close_store(s
 				       const char *buf, size_t n)
 {
 	unsigned int val;
-	if (!sscanf(buf, "%u", &val) == 1)
+
+	if (sscanf(buf, "%u", &val) != 1)
 		return -EINVAL;
 
 	set_lid_wake_behavior(!!val);

It's kinda irritating that this will cheerfully accept bogus input of
the form "42foo".  This happens about eleven billion times in sysfs
write() handlers but afaik we've never implemented a nice
sysfs_int_from_buffer() thingy which handles all the possible errors.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ