[tip: perf/core] x86/events/amd/iommu: Fix sysfs type mismatch

2021-04-16 Thread tip-bot2 for Nathan Chancellor
The following commit has been merged into the perf/core branch of tip:

Commit-ID: de5bc7b425d4c27ae5faa00ea7eb6b9780b9a355
Gitweb:
https://git.kernel.org/tip/de5bc7b425d4c27ae5faa00ea7eb6b9780b9a355
Author:Nathan Chancellor 
AuthorDate:Wed, 14 Apr 2021 17:11:11 -07:00
Committer: Peter Zijlstra 
CommitterDate: Fri, 16 Apr 2021 18:58:52 +02:00

x86/events/amd/iommu: Fix sysfs type mismatch

dev_attr_show() calls _iommu_event_show() via an indirect call but
_iommu_event_show()'s type does not currently match the type of the
show() member in 'struct device_attribute', resulting in a Control Flow
Integrity violation.

$ cat /sys/devices/amd_iommu_1/events/mem_dte_hit
csource=0x0a

$ dmesg | grep "CFI failure"
[ 3526.735140] CFI failure (target: _iommu_event_show...):

Change _iommu_event_show() and 'struct amd_iommu_event_desc' to
'struct device_attribute' so that there is no more CFI violation.

Fixes: 7be6296fdd75 ("perf/x86/amd: AMD IOMMU Performance Counter PERF uncore 
PMU implementation")
Signed-off-by: Nathan Chancellor 
Signed-off-by: Peter Zijlstra (Intel) 
Link: https://lkml.kernel.org/r/20210415001112.3024673-1-nat...@kernel.org
---
 arch/x86/events/amd/iommu.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/x86/events/amd/iommu.c b/arch/x86/events/amd/iommu.c
index be50ef8..6a98a76 100644
--- a/arch/x86/events/amd/iommu.c
+++ b/arch/x86/events/amd/iommu.c
@@ -81,12 +81,12 @@ static struct attribute_group amd_iommu_events_group = {
 };
 
 struct amd_iommu_event_desc {
-   struct kobj_attribute attr;
+   struct device_attribute attr;
const char *event;
 };
 
-static ssize_t _iommu_event_show(struct kobject *kobj,
-   struct kobj_attribute *attr, char *buf)
+static ssize_t _iommu_event_show(struct device *dev,
+   struct device_attribute *attr, char *buf)
 {
struct amd_iommu_event_desc *event =
container_of(attr, struct amd_iommu_event_desc, attr);


[tip: perf/core] perf/amd/uncore: Fix sysfs type mismatch

2021-04-16 Thread tip-bot2 for Nathan Chancellor
The following commit has been merged into the perf/core branch of tip:

Commit-ID: 5deac80d4571dffb51f452f0027979d72259a1b9
Gitweb:
https://git.kernel.org/tip/5deac80d4571dffb51f452f0027979d72259a1b9
Author:Nathan Chancellor 
AuthorDate:Wed, 14 Apr 2021 17:11:12 -07:00
Committer: Peter Zijlstra 
CommitterDate: Fri, 16 Apr 2021 18:58:52 +02:00

perf/amd/uncore: Fix sysfs type mismatch

dev_attr_show() calls the __uncore_*_show() functions via an indirect
call but their type does not currently match the type of the show()
member in 'struct device_attribute', resulting in a Control Flow
Integrity violation.

$ cat /sys/devices/amd_l3/format/umask
config:8-15

$ dmesg | grep "CFI failure"
[ 1258.174653] CFI failure (target: __uncore_umask_show...):

Update the type in the DEFINE_UNCORE_FORMAT_ATTR macro to match
'struct device_attribute' so that there is no more CFI violation.

Fixes: 06f2c24584f3 ("perf/amd/uncore: Prepare to scale for more attributes 
that vary per family")
Signed-off-by: Nathan Chancellor 
Signed-off-by: Peter Zijlstra (Intel) 
Link: https://lkml.kernel.org/r/20210415001112.3024673-2-nat...@kernel.org
---
 arch/x86/events/amd/uncore.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/x86/events/amd/uncore.c b/arch/x86/events/amd/uncore.c
index 7f014d4..582c0ff 100644
--- a/arch/x86/events/amd/uncore.c
+++ b/arch/x86/events/amd/uncore.c
@@ -275,14 +275,14 @@ static struct attribute_group amd_uncore_attr_group = {
 };
 
 #define DEFINE_UNCORE_FORMAT_ATTR(_var, _name, _format)
\
-static ssize_t __uncore_##_var##_show(struct kobject *kobj,\
-   struct kobj_attribute *attr,\
+static ssize_t __uncore_##_var##_show(struct device *dev,  \
+   struct device_attribute *attr,  \
char *page) \
 {  \
BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE); \
return sprintf(page, _format "\n"); \
 }  \
-static struct kobj_attribute format_attr_##_var =  \
+static struct device_attribute format_attr_##_var =\
__ATTR(_name, 0444, __uncore_##_var##_show, NULL)
 
 DEFINE_UNCORE_FORMAT_ATTR(event12, event,  "config:0-7,32-35");


[tip: perf/core] x86/events/amd/iommu: Fix sysfs type mismatch

2021-04-16 Thread tip-bot2 for Nathan Chancellor
The following commit has been merged into the perf/core branch of tip:

Commit-ID: bccae9d7b013bd708ece414f74defaee56790e1d
Gitweb:
https://git.kernel.org/tip/bccae9d7b013bd708ece414f74defaee56790e1d
Author:Nathan Chancellor 
AuthorDate:Wed, 14 Apr 2021 17:11:11 -07:00
Committer: Peter Zijlstra 
CommitterDate: Fri, 16 Apr 2021 16:32:44 +02:00

x86/events/amd/iommu: Fix sysfs type mismatch

dev_attr_show() calls _iommu_event_show() via an indirect call but
_iommu_event_show()'s type does not currently match the type of the
show() member in 'struct device_attribute', resulting in a Control Flow
Integrity violation.

$ cat /sys/devices/amd_iommu_1/events/mem_dte_hit
csource=0x0a

$ dmesg | grep "CFI failure"
[ 3526.735140] CFI failure (target: _iommu_event_show...):

Change _iommu_event_show() and 'struct amd_iommu_event_desc' to
'struct device_attribute' so that there is no more CFI violation.

Fixes: 7be6296fdd75 ("perf/x86/amd: AMD IOMMU Performance Counter PERF uncore 
PMU implementation")
Signed-off-by: Nathan Chancellor 
Signed-off-by: Peter Zijlstra (Intel) 
Link: https://lkml.kernel.org/r/20210415001112.3024673-1-nat...@kernel.org
---
 arch/x86/events/amd/iommu.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/x86/events/amd/iommu.c b/arch/x86/events/amd/iommu.c
index be50ef8..6a98a76 100644
--- a/arch/x86/events/amd/iommu.c
+++ b/arch/x86/events/amd/iommu.c
@@ -81,12 +81,12 @@ static struct attribute_group amd_iommu_events_group = {
 };
 
 struct amd_iommu_event_desc {
-   struct kobj_attribute attr;
+   struct device_attribute attr;
const char *event;
 };
 
-static ssize_t _iommu_event_show(struct kobject *kobj,
-   struct kobj_attribute *attr, char *buf)
+static ssize_t _iommu_event_show(struct device *dev,
+   struct device_attribute *attr, char *buf)
 {
struct amd_iommu_event_desc *event =
container_of(attr, struct amd_iommu_event_desc, attr);


[tip: perf/core] perf/amd/uncore: Fix sysfs type mismatch

2021-04-16 Thread tip-bot2 for Nathan Chancellor
The following commit has been merged into the perf/core branch of tip:

Commit-ID: b04c0cddff6d1d6656c7f7c08c0b8f07eb287564
Gitweb:
https://git.kernel.org/tip/b04c0cddff6d1d6656c7f7c08c0b8f07eb287564
Author:Nathan Chancellor 
AuthorDate:Wed, 14 Apr 2021 17:11:12 -07:00
Committer: Peter Zijlstra 
CommitterDate: Fri, 16 Apr 2021 16:32:44 +02:00

perf/amd/uncore: Fix sysfs type mismatch

dev_attr_show() calls the __uncore_*_show() functions via an indirect
call but their type does not currently match the type of the show()
member in 'struct device_attribute', resulting in a Control Flow
Integrity violation.

$ cat /sys/devices/amd_l3/format/umask
config:8-15

$ dmesg | grep "CFI failure"
[ 1258.174653] CFI failure (target: __uncore_umask_show...):

Update the type in the DEFINE_UNCORE_FORMAT_ATTR macro to match
'struct device_attribute' so that there is no more CFI violation.

Fixes: 06f2c24584f3 ("perf/amd/uncore: Prepare to scale for more attributes 
that vary per family")
Signed-off-by: Nathan Chancellor 
Signed-off-by: Peter Zijlstra (Intel) 
Link: https://lkml.kernel.org/r/20210415001112.3024673-2-nat...@kernel.org
---
 arch/x86/events/amd/uncore.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/x86/events/amd/uncore.c b/arch/x86/events/amd/uncore.c
index 7f014d4..582c0ff 100644
--- a/arch/x86/events/amd/uncore.c
+++ b/arch/x86/events/amd/uncore.c
@@ -275,14 +275,14 @@ static struct attribute_group amd_uncore_attr_group = {
 };
 
 #define DEFINE_UNCORE_FORMAT_ATTR(_var, _name, _format)
\
-static ssize_t __uncore_##_var##_show(struct kobject *kobj,\
-   struct kobj_attribute *attr,\
+static ssize_t __uncore_##_var##_show(struct device *dev,  \
+   struct device_attribute *attr,  \
char *page) \
 {  \
BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE); \
return sprintf(page, _format "\n"); \
 }  \
-static struct kobj_attribute format_attr_##_var =  \
+static struct device_attribute format_attr_##_var =\
__ATTR(_name, 0444, __uncore_##_var##_show, NULL)
 
 DEFINE_UNCORE_FORMAT_ATTR(event12, event,  "config:0-7,32-35");


[tip: x86/build] efi/libstub: Add $(CLANG_FLAGS) to x86 flags

2021-03-26 Thread tip-bot2 for Nathan Chancellor
The following commit has been merged into the x86/build branch of tip:

Commit-ID: 58d746c119dfa28e72fc35aacaf3d2a3ac625cd0
Gitweb:
https://git.kernel.org/tip/58d746c119dfa28e72fc35aacaf3d2a3ac625cd0
Author:Nathan Chancellor 
AuthorDate:Thu, 25 Mar 2021 17:04:35 -07:00
Committer: Borislav Petkov 
CommitterDate: Fri, 26 Mar 2021 11:34:58 +01:00

efi/libstub: Add $(CLANG_FLAGS) to x86 flags

When cross compiling x86 on an ARM machine with clang, there are several
errors along the lines of:

  arch/x86/include/asm/page_64.h:52:7: error: invalid output constraint '=D' in 
asm

This happens because the x86 flags in the EFI stub are not derived from
KBUILD_CFLAGS like the other architectures are and the clang flags that
set the target architecture ('--target=') and the path to the GNU cross
tools ('--prefix=') are not present, meaning that the host architecture
is targeted.

These flags are available as $(CLANG_FLAGS) from the main Makefile so
add them to the cflags for x86 so that cross compiling works as expected.

Signed-off-by: Nathan Chancellor 
Signed-off-by: Borislav Petkov 
Acked-by: Ard Biesheuvel 
Link: https://lkml.kernel.org/r/20210326000435.4785-4-nat...@kernel.org
---
 drivers/firmware/efi/libstub/Makefile | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/firmware/efi/libstub/Makefile 
b/drivers/firmware/efi/libstub/Makefile
index c23466e..d053757 100644
--- a/drivers/firmware/efi/libstub/Makefile
+++ b/drivers/firmware/efi/libstub/Makefile
@@ -13,7 +13,8 @@ cflags-$(CONFIG_X86)  += -m$(BITS) -D__KERNEL__ \
   -Wno-pointer-sign \
   $(call cc-disable-warning, 
address-of-packed-member) \
   $(call cc-disable-warning, gnu) \
-  -fno-asynchronous-unwind-tables
+  -fno-asynchronous-unwind-tables \
+  $(CLANG_FLAGS)
 
 # arm64 uses the full KBUILD_CFLAGS so it's necessary to explicitly
 # disable the stackleak plugin


[tip: x86/build] x86/boot: Add $(CLANG_FLAGS) to compressed KBUILD_CFLAGS

2021-03-26 Thread tip-bot2 for Nathan Chancellor
The following commit has been merged into the x86/build branch of tip:

Commit-ID: d5cbd80e302dfea59726c44c56ab7957f822409f
Gitweb:
https://git.kernel.org/tip/d5cbd80e302dfea59726c44c56ab7957f822409f
Author:Nathan Chancellor 
AuthorDate:Thu, 25 Mar 2021 17:04:34 -07:00
Committer: Borislav Petkov 
CommitterDate: Fri, 26 Mar 2021 11:32:55 +01:00

x86/boot: Add $(CLANG_FLAGS) to compressed KBUILD_CFLAGS

When cross compiling x86 on an ARM machine with clang, there are several
errors along the lines of:

  arch/x86/include/asm/string_64.h:27:10: error: invalid output constraint 
'=' in asm

This happens because the compressed boot Makefile reassigns KBUILD_CFLAGS
and drops the clang flags that set the target architecture ('--target=')
and the path to the GNU cross tools ('--prefix='), meaning that the host
architecture is targeted.

These flags are available as $(CLANG_FLAGS) from the main Makefile so
add them to the compressed boot folder's KBUILD_CFLAGS so that cross
compiling works as expected.

Signed-off-by: Nathan Chancellor 
Signed-off-by: Borislav Petkov 
Acked-by: Ard Biesheuvel 
Link: https://lkml.kernel.org/r/20210326000435.4785-3-nat...@kernel.org
---
 arch/x86/boot/compressed/Makefile | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/x86/boot/compressed/Makefile 
b/arch/x86/boot/compressed/Makefile
index e0bc398..6e5522a 100644
--- a/arch/x86/boot/compressed/Makefile
+++ b/arch/x86/boot/compressed/Makefile
@@ -46,6 +46,7 @@ KBUILD_CFLAGS += -D__DISABLE_EXPORTS
 # Disable relocation relaxation in case the link is not PIE.
 KBUILD_CFLAGS += $(call as-option,-Wa$(comma)-mrelax-relocations=no)
 KBUILD_CFLAGS += -include $(srctree)/include/linux/hidden.h
+KBUILD_CFLAGS += $(CLANG_FLAGS)
 
 # sev-es.c indirectly inludes inat-table.h which is generated during
 # compilation and stored in $(objtree). Add the directory to the includes so


[tip: core/static_call] static_call: Fix return type of static_call_init

2020-10-03 Thread tip-bot2 for Nathan Chancellor
The following commit has been merged into the core/static_call branch of tip:

Commit-ID: 69e0ad37c9f32d5aa1beb02aab4ec0cd055be013
Gitweb:
https://git.kernel.org/tip/69e0ad37c9f32d5aa1beb02aab4ec0cd055be013
Author:Nathan Chancellor 
AuthorDate:Mon, 28 Sep 2020 16:09:39 -07:00
Committer: Peter Zijlstra 
CommitterDate: Fri, 02 Oct 2020 21:18:25 +02:00

static_call: Fix return type of static_call_init

Functions that are passed to early_initcall should be of type
initcall_t, which expects a return type of int. This is not currently an
error but a patch in the Clang LTO series could change that in the
future.

Fixes: 9183c3f9ed71 ("static_call: Add inline static call infrastructure")
Signed-off-by: Nathan Chancellor 
Signed-off-by: Peter Zijlstra (Intel) 
Reviewed-by: Sami Tolvanen 
Link: 
https://lore.kernel.org/lkml/20200903203053.3411268-17-samitolva...@google.com/
---
 include/linux/static_call.h | 6 +++---
 kernel/static_call.c| 5 +++--
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/include/linux/static_call.h b/include/linux/static_call.h
index bfa2ba3..695da4c 100644
--- a/include/linux/static_call.h
+++ b/include/linux/static_call.h
@@ -136,7 +136,7 @@ extern void arch_static_call_transform(void *site, void 
*tramp, void *func, bool
 
 #ifdef CONFIG_HAVE_STATIC_CALL_INLINE
 
-extern void __init static_call_init(void);
+extern int __init static_call_init(void);
 
 struct static_call_mod {
struct static_call_mod *next;
@@ -187,7 +187,7 @@ extern int static_call_text_reserved(void *start, void 
*end);
 
 #elif defined(CONFIG_HAVE_STATIC_CALL)
 
-static inline void static_call_init(void) { }
+static inline int static_call_init(void) { return 0; }
 
 struct static_call_key {
void *func;
@@ -234,7 +234,7 @@ static inline int static_call_text_reserved(void *start, 
void *end)
 
 #else /* Generic implementation */
 
-static inline void static_call_init(void) { }
+static inline int static_call_init(void) { return 0; }
 
 struct static_call_key {
void *func;
diff --git a/kernel/static_call.c b/kernel/static_call.c
index f8362b3..84565c2 100644
--- a/kernel/static_call.c
+++ b/kernel/static_call.c
@@ -410,12 +410,12 @@ int static_call_text_reserved(void *start, void *end)
return __static_call_mod_text_reserved(start, end);
 }
 
-void __init static_call_init(void)
+int __init static_call_init(void)
 {
int ret;
 
if (static_call_initialized)
-   return;
+   return 0;
 
cpus_read_lock();
static_call_lock();
@@ -434,6 +434,7 @@ void __init static_call_init(void)
 #ifdef CONFIG_MODULES
register_module_notifier(_call_module_nb);
 #endif
+   return 0;
 }
 early_initcall(static_call_init);
 


[tip: x86/urgent] x86/mmiotrace: Use cpumask_available() for cpumask_var_t variables

2020-05-19 Thread tip-bot2 for Nathan Chancellor
The following commit has been merged into the x86/urgent branch of tip:

Commit-ID: d7110a26e5905ec2fe3fc88bc6a538901accb72b
Gitweb:
https://git.kernel.org/tip/d7110a26e5905ec2fe3fc88bc6a538901accb72b
Author:Nathan Chancellor 
AuthorDate:Wed, 08 Apr 2020 13:53:23 -07:00
Committer: Borislav Petkov 
CommitterDate: Tue, 19 May 2020 19:30:28 +02:00

x86/mmiotrace: Use cpumask_available() for cpumask_var_t variables

When building with Clang + -Wtautological-compare and
CONFIG_CPUMASK_OFFSTACK unset:

  arch/x86/mm/mmio-mod.c:375:6: warning: comparison of array 'downed_cpus'
  equal to a null pointer is always false [-Wtautological-pointer-compare]
  if (downed_cpus == NULL &&
  ^~~
  arch/x86/mm/mmio-mod.c:405:6: warning: comparison of array 'downed_cpus'
  equal to a null pointer is always false [-Wtautological-pointer-compare]
  if (downed_cpus == NULL || cpumask_weight(downed_cpus) == 0)
  ^~~
  2 warnings generated.

Commit

  f7e30f01a9e2 ("cpumask: Add helper cpumask_available()")

added cpumask_available() to fix warnings of this nature. Use that here
so that clang does not warn regardless of CONFIG_CPUMASK_OFFSTACK's
value.

Reported-by: Sedat Dilek 
Signed-off-by: Nathan Chancellor 
Signed-off-by: Borislav Petkov 
Reviewed-by: Nick Desaulniers 
Acked-by: Steven Rostedt (VMware) 
Link: https://github.com/ClangBuiltLinux/linux/issues/982
Link: https://lkml.kernel.org/r/20200408205323.44490-1-natechancel...@gmail.com
---
 arch/x86/mm/mmio-mod.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/mm/mmio-mod.c b/arch/x86/mm/mmio-mod.c
index 109325d..43fd19b 100644
--- a/arch/x86/mm/mmio-mod.c
+++ b/arch/x86/mm/mmio-mod.c
@@ -372,7 +372,7 @@ static void enter_uniprocessor(void)
int cpu;
int err;
 
-   if (downed_cpus == NULL &&
+   if (!cpumask_available(downed_cpus) &&
!alloc_cpumask_var(_cpus, GFP_KERNEL)) {
pr_notice("Failed to allocate mask\n");
goto out;
@@ -402,7 +402,7 @@ static void leave_uniprocessor(void)
int cpu;
int err;
 
-   if (downed_cpus == NULL || cpumask_weight(downed_cpus) == 0)
+   if (!cpumask_available(downed_cpus) || cpumask_weight(downed_cpus) == 0)
return;
pr_notice("Re-enabling CPUs...\n");
for_each_cpu(cpu, downed_cpus) {