Skip to content

Commit 5e720f8

Browse files
t-8chrafaeljw
authored andcommitted
cpufreq: amd-pstate: fix global sysfs attribute type
In commit 3666062 ("cpufreq: amd-pstate: move to use bus_get_dev_root()") the "amd_pstate" attributes where moved from a dedicated kobject to the cpu root kobject. While the dedicated kobject expects to contain kobj_attributes the root kobject needs device_attributes. As the changed arguments are not used by the callbacks it works most of the time. However CFI will detect this issue: [ 4947.849350] CFI failure at dev_attr_show+0x24/0x60 (target: show_status+0x0/0x70; expected type: 0x8651b1de) ... [ 4947.849409] Call Trace: [ 4947.849410] <TASK> [ 4947.849411] ? __warn+0xcf/0x1c0 [ 4947.849414] ? dev_attr_show+0x24/0x60 [ 4947.849415] ? report_cfi_failure+0x4e/0x60 [ 4947.849417] ? handle_cfi_failure+0x14c/0x1d0 [ 4947.849419] ? __cfi_show_status+0x10/0x10 [ 4947.849420] ? handle_bug+0x4f/0x90 [ 4947.849421] ? exc_invalid_op+0x1a/0x60 [ 4947.849422] ? asm_exc_invalid_op+0x1a/0x20 [ 4947.849424] ? __cfi_show_status+0x10/0x10 [ 4947.849425] ? dev_attr_show+0x24/0x60 [ 4947.849426] sysfs_kf_seq_show+0xa6/0x110 [ 4947.849433] seq_read_iter+0x16c/0x4b0 [ 4947.849436] vfs_read+0x272/0x2d0 [ 4947.849438] ksys_read+0x72/0xe0 [ 4947.849439] do_syscall_64+0x76/0xb0 [ 4947.849440] ? do_user_addr_fault+0x252/0x650 [ 4947.849442] ? exc_page_fault+0x7a/0x1b0 [ 4947.849443] entry_SYSCALL_64_after_hwframe+0x72/0xdc Fixes: 3666062 ("cpufreq: amd-pstate: move to use bus_get_dev_root()") Reported-by: Jannik Glückert <jannik.glueckert@gmail.com> Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217765 Link: https://lore.kernel.org/lkml/c7f1bf9b-b183-bf6e-1cbb-d43f72494083@gmail.com/ Cc: All applicable <stable@vger.kernel.org> Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Reviewed-by: Nathan Chancellor <nathan@kernel.org> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
1 parent 52a93d3 commit 5e720f8

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

drivers/cpufreq/amd-pstate.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1012,8 +1012,8 @@ static int amd_pstate_update_status(const char *buf, size_t size)
10121012
return 0;
10131013
}
10141014

1015-
static ssize_t show_status(struct kobject *kobj,
1016-
struct kobj_attribute *attr, char *buf)
1015+
static ssize_t status_show(struct device *dev,
1016+
struct device_attribute *attr, char *buf)
10171017
{
10181018
ssize_t ret;
10191019

@@ -1024,7 +1024,7 @@ static ssize_t show_status(struct kobject *kobj,
10241024
return ret;
10251025
}
10261026

1027-
static ssize_t store_status(struct kobject *a, struct kobj_attribute *b,
1027+
static ssize_t status_store(struct device *a, struct device_attribute *b,
10281028
const char *buf, size_t count)
10291029
{
10301030
char *p = memchr(buf, '\n', count);
@@ -1043,7 +1043,7 @@ cpufreq_freq_attr_ro(amd_pstate_lowest_nonlinear_freq);
10431043
cpufreq_freq_attr_ro(amd_pstate_highest_perf);
10441044
cpufreq_freq_attr_rw(energy_performance_preference);
10451045
cpufreq_freq_attr_ro(energy_performance_available_preferences);
1046-
define_one_global_rw(status);
1046+
static DEVICE_ATTR_RW(status);
10471047

10481048
static struct freq_attr *amd_pstate_attr[] = {
10491049
&amd_pstate_max_freq,
@@ -1062,7 +1062,7 @@ static struct freq_attr *amd_pstate_epp_attr[] = {
10621062
};
10631063

10641064
static struct attribute *pstate_global_attributes[] = {
1065-
&status.attr,
1065+
&dev_attr_status.attr,
10661066
NULL
10671067
};
10681068

0 commit comments

Comments
 (0)