| From 5e0c94d3aeeecc68c573033f08d9678fecf253bd Mon Sep 17 00:00:00 2001 |
| From: Mika Westerberg <mika.westerberg@linux.intel.com> |
| Date: Wed, 22 Jan 2020 19:05:20 +0300 |
| Subject: platform/x86: intel_mid_powerbtn: Take a copy of ddata |
| |
| From: Mika Westerberg <mika.westerberg@linux.intel.com> |
| |
| commit 5e0c94d3aeeecc68c573033f08d9678fecf253bd upstream. |
| |
| The driver gets driver_data from memory that is marked as const (which |
| is probably put to read-only memory) and it then modifies it. This |
| likely causes some sort of fault to happen. |
| |
| Fix this by taking a copy of the structure. |
| |
| Fixes: c94a8ff14de3 ("platform/x86: intel_mid_powerbtn: make mid_pb_ddata const") |
| Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> |
| Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
| Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/platform/x86/intel_mid_powerbtn.c | 5 +++-- |
| 1 file changed, 3 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/platform/x86/intel_mid_powerbtn.c |
| +++ b/drivers/platform/x86/intel_mid_powerbtn.c |
| @@ -146,9 +146,10 @@ static int mid_pb_probe(struct platform_ |
| |
| input_set_capability(input, EV_KEY, KEY_POWER); |
| |
| - ddata = (struct mid_pb_ddata *)id->driver_data; |
| + ddata = devm_kmemdup(&pdev->dev, (void *)id->driver_data, |
| + sizeof(*ddata), GFP_KERNEL); |
| if (!ddata) |
| - return -ENODATA; |
| + return -ENOMEM; |
| |
| ddata->dev = &pdev->dev; |
| ddata->irq = irq; |