Skip to content

Commit 164e64a

Browse files
committed
Merge tag 'acpi-5.13-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
Pull ACPI fixes from Rafael Wysocki: "These revert one recent commit that turned out to be problematic, address two issues in the ACPI "custom method" interface and update GPIO properties documentation. Specifics: - Revent recent commit related to the handling of ACPI power resources during initialization, because it turned out to cause problems to occur on some systems (Rafael Wysocki). - Fix potential use-after-free and potential memory leak in the ACPI "custom method" debugfs interface (Mark Langsdorf). - Update ACPI GPIO properties documentation to cover assumptions regarding GPIO polarity (Andy Shevchenko)" * tag 'acpi-5.13-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: Revert "ACPI: scan: Turn off unused power resources during initialization" ACPI: custom_method: fix a possible memory leak ACPI: custom_method: fix potential use-after-free issue Documentation: firmware-guide: gpio-properties: Add note to SPI CS case
2 parents 2423e14 + 3da53c7 commit 164e64a

File tree

6 files changed

+11
-5
lines changed

6 files changed

+11
-5
lines changed

Documentation/firmware-guide/acpi/gpio-properties.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,12 @@ native::
9999
}
100100
}
101101

102+
Note, that historically ACPI has no means of the GPIO polarity and thus
103+
the SPISerialBus() resource defines it on the per-chip basis. In order
104+
to avoid a chain of negations, the GPIO polarity is considered being
105+
Active High. Even for the cases when _DSD() is involved (see the example
106+
above) the GPIO CS polarity must be defined Active High to avoid ambiguity.
107+
102108
Other supported properties
103109
==========================
104110

drivers/acpi/custom_method.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ static ssize_t cm_write(struct file *file, const char __user *user_buf,
4242
sizeof(struct acpi_table_header)))
4343
return -EFAULT;
4444
uncopied_bytes = max_size = table.length;
45+
/* make sure the buf is not allocated */
46+
kfree(buf);
4547
buf = kzalloc(max_size, GFP_KERNEL);
4648
if (!buf)
4749
return -ENOMEM;
@@ -55,6 +57,7 @@ static ssize_t cm_write(struct file *file, const char __user *user_buf,
5557
(*ppos + count < count) ||
5658
(count > uncopied_bytes)) {
5759
kfree(buf);
60+
buf = NULL;
5861
return -EINVAL;
5962
}
6063

@@ -76,7 +79,6 @@ static ssize_t cm_write(struct file *file, const char __user *user_buf,
7679
add_taint(TAINT_OVERRIDDEN_ACPI_TABLE, LOCKDEP_NOW_UNRELIABLE);
7780
}
7881

79-
kfree(buf);
8082
return count;
8183
}
8284

drivers/acpi/internal.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,6 @@ int acpi_device_sleep_wake(struct acpi_device *dev,
142142
int acpi_power_get_inferred_state(struct acpi_device *device, int *state);
143143
int acpi_power_on_resources(struct acpi_device *device, int state);
144144
int acpi_power_transition(struct acpi_device *device, int state);
145-
void acpi_turn_off_unused_power_resources(void);
146145

147146
/* --------------------------------------------------------------------------
148147
Device Power Management

drivers/acpi/power.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -995,7 +995,6 @@ void acpi_resume_power_resources(void)
995995

996996
mutex_unlock(&power_resource_list_lock);
997997
}
998-
#endif
999998

1000999
void acpi_turn_off_unused_power_resources(void)
10011000
{
@@ -1016,3 +1015,4 @@ void acpi_turn_off_unused_power_resources(void)
10161015

10171016
mutex_unlock(&power_resource_list_lock);
10181017
}
1018+
#endif

drivers/acpi/scan.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2359,8 +2359,6 @@ int __init acpi_scan_init(void)
23592359
}
23602360
}
23612361

2362-
acpi_turn_off_unused_power_resources();
2363-
23642362
acpi_scan_initialized = true;
23652363

23662364
out:

drivers/acpi/sleep.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ extern struct list_head acpi_wakeup_device_list;
88
extern struct mutex acpi_device_lock;
99

1010
extern void acpi_resume_power_resources(void);
11+
extern void acpi_turn_off_unused_power_resources(void);
1112

1213
static inline acpi_status acpi_set_waking_vector(u32 wakeup_address)
1314
{

0 commit comments

Comments
 (0)