PCI: hotplug: Constify hotplug_slot_ops
Hotplug drivers cannot declare their hotplug_slot_ops const, making them attractive targets for attackers, because upon registration of a hotplug slot, __pci_hp_initialize() writes to the "owner" and "mod_name" members in that struct. Fix by moving these members to struct hotplug_slot and constify every driver's hotplug_slot_ops except for pciehp. pciehp constructs its hotplug_slot_ops at runtime based on the PCIe port's capabilities, hence cannot declare them const. It can be converted to __write_rarely once that's mainlined: http://www.openwall.com/lists/kernel-hardening/2016/11/16/3 Signed-off-by: Lukas Wunner <lukas@wunner.de> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Acked-by: Tyrel Datwyler <tyreld@linux.vnet.ibm.com> # drivers/pci/hotplug/rpa* Acked-by: Andy Shevchenko <andy.shevchenko@gmail.com> # drivers/platform/x86 Cc: Len Brown <lenb@kernel.org> Cc: Scott Murray <scott@spiteful.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Oliver OHalloran <oliveroh@au1.ibm.com> Cc: Gavin Shan <gwshan@linux.vnet.ibm.com> Cc: Sebastian Ott <sebott@linux.vnet.ibm.com> Cc: Gerald Schaefer <gerald.schaefer@de.ibm.com> Cc: Corentin Chary <corentin.chary@gmail.com> Cc: Darren Hart <dvhart@infradead.org>
This commit is contained in:

committed by
Bjorn Helgaas

parent
d758714235
commit
81c4b5bf30
@@ -16,8 +16,6 @@
|
||||
|
||||
/**
|
||||
* struct hotplug_slot_ops -the callbacks that the hotplug pci core can use
|
||||
* @owner: The module owner of this structure
|
||||
* @mod_name: The module name (KBUILD_MODNAME) of this structure
|
||||
* @enable_slot: Called when the user wants to enable a specific pci slot
|
||||
* @disable_slot: Called when the user wants to disable a specific pci slot
|
||||
* @set_attention_status: Called to set the specific slot's attention LED to
|
||||
@@ -46,8 +44,6 @@
|
||||
* set an LED, enable / disable power, etc.)
|
||||
*/
|
||||
struct hotplug_slot_ops {
|
||||
struct module *owner;
|
||||
const char *mod_name;
|
||||
int (*enable_slot) (struct hotplug_slot *slot);
|
||||
int (*disable_slot) (struct hotplug_slot *slot);
|
||||
int (*set_attention_status) (struct hotplug_slot *slot, u8 value);
|
||||
@@ -82,15 +78,19 @@ struct hotplug_slot_info {
|
||||
* this slot.
|
||||
* @private: used by the hotplug pci controller driver to store whatever it
|
||||
* needs.
|
||||
* @owner: The module owner of this structure
|
||||
* @mod_name: The module name (KBUILD_MODNAME) of this structure
|
||||
*/
|
||||
struct hotplug_slot {
|
||||
struct hotplug_slot_ops *ops;
|
||||
const struct hotplug_slot_ops *ops;
|
||||
struct hotplug_slot_info *info;
|
||||
void *private;
|
||||
|
||||
/* Variables below this are for use only by the hotplug pci core. */
|
||||
struct list_head slot_list;
|
||||
struct pci_slot *pci_slot;
|
||||
struct module *owner;
|
||||
const char *mod_name;
|
||||
};
|
||||
|
||||
static inline const char *hotplug_slot_name(const struct hotplug_slot *slot)
|
||||
|
Reference in New Issue
Block a user