1f73373
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
Jeremy Cline d1b6f8c
From: Jakub Racek <jracek@redhat.com>
Jeremy Cline d1b6f8c
Date: Thu, 22 Nov 2018 12:59:45 +0100
Jeremy Cline d1b6f8c
Subject: [PATCH] rh_kabi: introduce RH_KABI_EXCLUDE
Jeremy Cline d1b6f8c
Jeremy Cline d1b6f8c
Message-id: <1542891606-8048-24-git-send-email-jracek@redhat.com>
Jeremy Cline d1b6f8c
Patchwork-id: 233503
Jeremy Cline d1b6f8c
O-Subject: [ARK PATCH 23/44] [kernel] rh_kabi: introduce RH_KABI_EXCLUDE
Jeremy Cline d1b6f8c
Bugzilla: 1652256
Jeremy Cline d1b6f8c
RH-Acked-by: Don Zickus <dzickus@redhat.com>
Jeremy Cline d1b6f8c
RH-Acked-by: Jiri Benc <jbenc@redhat.com>
Jeremy Cline d1b6f8c
Jeremy Cline d1b6f8c
From: Jiri Benc <jbenc@redhat.com>
Jeremy Cline d1b6f8c
Jeremy Cline d1b6f8c
Bugzilla: 1652256
Jeremy Cline d1b6f8c
Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=19244562
Jeremy Cline d1b6f8c
Jeremy Cline d1b6f8c
rhel8 commit 1c588b1bbe6ea3e9e1701ccf10e22f73f687ad02
Jeremy Cline d1b6f8c
Author: Jiri Benc <jbenc@redhat.com>
Jeremy Cline d1b6f8c
Date:   Wed Nov 21 17:15:39 2018 +0100
Jeremy Cline d1b6f8c
Jeremy Cline d1b6f8c
    [kernel] rh_kabi: introduce RH_KABI_EXCLUDE
Jeremy Cline d1b6f8c
Jeremy Cline d1b6f8c
    Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1568551
Jeremy Cline d1b6f8c
Jeremy Cline d1b6f8c
    Add a way to exclude certain fields of a structure that would be otherwise
Jeremy Cline d1b6f8c
    kABI whitelisted. The new RH_KABI_EXCLUDE macro serves two purposes:
Jeremy Cline d1b6f8c
Jeremy Cline d1b6f8c
    1. Not adding the excluded fields to symbol checksums, making their later
Jeremy Cline d1b6f8c
       changes easier.
Jeremy Cline d1b6f8c
Jeremy Cline d1b6f8c
    2. Document that the given fields are not considered to be kABI whitelisted
Jeremy Cline d1b6f8c
       by Red Hat.
Jeremy Cline d1b6f8c
Jeremy Cline d1b6f8c
    Note that:
Jeremy Cline d1b6f8c
Jeremy Cline d1b6f8c
    - This needs to be done _before_ the actual structure gets whitelisted.
Jeremy Cline d1b6f8c
Jeremy Cline d1b6f8c
    - It still allows later conversion of the excluded fields to whitelist
Jeremy Cline d1b6f8c
      covered fields by simply changing RH_KABI_EXCLUDE to RH_KABI_EXTEND.
Jeremy Cline d1b6f8c
Jeremy Cline d1b6f8c
    - The excluded fields can be modified at will but extra care needs to be
Jeremy Cline d1b6f8c
      taken to not cause problems with 3rd party drivers using the fields. See
Jeremy Cline d1b6f8c
      the comment inside the patch for details.
Jeremy Cline d1b6f8c
Jeremy Cline d1b6f8c
    Signed-off-by: Jiri Benc <jbenc@redhat.com>
Jeremy Cline d1b6f8c
    Signed-off-by: Herton R. Krzesinski <herton@redhat.com>
Jeremy Cline d1b6f8c
Jeremy Cline d1b6f8c
Upstream Status: RHEL only
Jeremy Cline d1b6f8c
Signed-off-by: Jakub Racek <jracek@redhat.com>
Jeremy Cline d1b6f8c
---
Jeremy Cline d1b6f8c
 include/linux/rh_kabi.h | 17 +++++++++++++++++
Jeremy Cline d1b6f8c
 1 file changed, 17 insertions(+)
Jeremy Cline d1b6f8c
Jeremy Cline d1b6f8c
diff --git a/include/linux/rh_kabi.h b/include/linux/rh_kabi.h
Jeremy Cline d1b6f8c
index e0d3353802bb..87f2bd530df7 100644
Jeremy Cline d1b6f8c
--- a/include/linux/rh_kabi.h
Jeremy Cline d1b6f8c
+++ b/include/linux/rh_kabi.h
Jeremy Cline d1b6f8c
@@ -80,6 +80,18 @@
Jeremy Cline d1b6f8c
  *   corrupt memory.  Instead, by changing the symbol checksum, such modules
Jeremy Cline d1b6f8c
  *   won't be loaded by the kernel.  This macro should only be used as a
Jeremy Cline d1b6f8c
  *   last resort when all other KABI workarounds have failed.
Jeremy Cline d1b6f8c
+ * RH_KABI_EXCLUDE
Jeremy Cline d1b6f8c
+ *   Exclude the element from checksum generation.  Any such element is
Jeremy Cline d1b6f8c
+ *   considered not to be part of the kABI whitelist and may be changed at
Jeremy Cline d1b6f8c
+ *   will.  Note however that it's the responsibility of the developer
Jeremy Cline d1b6f8c
+ *   changing the element to ensure 3rd party drivers using this element
Jeremy Cline d1b6f8c
+ *   won't panic, for example by not allowing them to be loaded.  That can
Jeremy Cline d1b6f8c
+ *   be achieved by changing another, non-whitelisted symbol they use,
Jeremy Cline d1b6f8c
+ *   either by nature of the change or by using RH_KABI_FORCE_CHANGE.
Jeremy Cline d1b6f8c
+ *
Jeremy Cline d1b6f8c
+ *   Also note that any change to the element must preserve its size. Change
Jeremy Cline d1b6f8c
+ *   of the size is not allowed and would constitute a silent kABI breakage.
Jeremy Cline d1b6f8c
+ *   Beware that the RH_KABI_EXCLUDE macro does not do any size checks.
Jeremy Cline d1b6f8c
  *
Jeremy Cline d1b6f8c
  * NOTE
Jeremy Cline d1b6f8c
  *   Don't use ';' after these macros as it messes up the kABI checker by
Jeremy Cline d1b6f8c
@@ -100,6 +112,7 @@
Jeremy Cline d1b6f8c
 # define _RH_KABI_DEPRECATE_FN(_type, _orig, _args...)	_type (*_orig)(_args)
Jeremy Cline d1b6f8c
 # define _RH_KABI_REPLACE(_orig, _new)		_orig
Jeremy Cline d1b6f8c
 # define _RH_KABI_REPLACE_UNSAFE(_orig, _new)	_orig
Jeremy Cline d1b6f8c
+# define _RH_KABI_EXCLUDE(_elem)
6c2cc50
Jeremy Cline d1b6f8c
 #else
6c2cc50
Jeremy Cline d1b6f8c
@@ -137,6 +150,8 @@
Jeremy Cline d1b6f8c
 	}
Jeremy Cline d1b6f8c
 # define _RH_KABI_REPLACE_UNSAFE(_orig, _new)	_new
6c2cc50
Jeremy Cline d1b6f8c
+# define _RH_KABI_EXCLUDE(_elem)		_elem
Jeremy Cline d1b6f8c
+
Jeremy Cline d1b6f8c
 #endif /* __GENKSYMS__ */
6c2cc50
Jeremy Cline d1b6f8c
 /* semicolon added wrappers for the RH_KABI_REPLACE macros */
Jeremy Cline d1b6f8c
@@ -169,4 +184,6 @@
Jeremy Cline d1b6f8c
  */
Jeremy Cline d1b6f8c
 # define _RH_KABI_RESERVE(n)		unsigned long rh_reserved##n
6c2cc50
Jeremy Cline d1b6f8c
+#define RH_KABI_EXCLUDE(_elem)		_RH_KABI_EXCLUDE(_elem);
Jeremy Cline d1b6f8c
+
Jeremy Cline d1b6f8c
 #endif /* _LINUX_RH_KABI_H */
Jeremy Cline d1b6f8c
-- 
6c2cc50
2.26.2
Jeremy Cline d1b6f8c