From f12cb09789e267d13b22bb04c52d2aaf32901bda Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 10 Mar 2020 18:16:26 +0100 Subject: [PATCH] ANDROID: GKI: USB: add Android ABI padding to some structures To try to mitigate potential future USB api changes, add some padding to the following structures: struct usb_interface struct usb_host_bos struct usb_bus struct usb_device struct usb_driver struct urb struct usb_hcd struct hc_driver struct usb_tt struct usbnet struct driver_info (for usbnet driver) Based on a patch from Oliver Neukum from the SLES kernel. Leaf changes summary: 10 artifacts changed Changed leaf types summary: 10 leaf types changed Removed/Changed/Added functions summary: 0 Removed, 0 Changed, 0 Added function Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable 'struct driver_info at usbnet.h:94:1' changed: type size changed from 1152 to 1280 (in bits) 2 data member insertions: 'u64 driver_info::android_kabi_reserved1', at offset 1152 (in bits) at usbnet.h:183:1 'u64 driver_info::android_kabi_reserved2', at offset 1216 (in bits) at usbnet.h:184:1 10 impacted interfaces: 'struct hc_driver at hcd.h:249:1' changed: type size changed from 2880 to 3136 (in bits) 4 data member insertions: 'u64 hc_driver::android_kabi_reserved1', at offset 2880 (in bits) at hcd.h:419:1 'u64 hc_driver::android_kabi_reserved2', at offset 2944 (in bits) at hcd.h:420:1 'u64 hc_driver::android_kabi_reserved3', at offset 3008 (in bits) at hcd.h:421:1 'u64 hc_driver::android_kabi_reserved4', at offset 3072 (in bits) at hcd.h:422:1 16 impacted interfaces: 'struct urb at usb.h:1550:1' changed: type size changed from 1472 to 1728 (in bits) 4 data member insertions: 'u64 urb::android_kabi_reserved1', at offset 1472 (in bits) at usb.h:1613:1 'u64 urb::android_kabi_reserved2', at offset 1536 (in bits) at usb.h:1614:1 'u64 urb::android_kabi_reserved3', at offset 1600 (in bits) at usb.h:1615:1 'u64 urb::android_kabi_reserved4', at offset 1664 (in bits) at usb.h:1616:1 39 impacted interfaces: 'struct usb_bus at usb.h:424:1' changed: type size changed from 1024 to 1280 (in bits) 4 data member insertions: 'u64 usb_bus::android_kabi_reserved1', at offset 1024 (in bits) at usb.h:480:1 'u64 usb_bus::android_kabi_reserved2', at offset 1088 (in bits) at usb.h:481:1 'u64 usb_bus::android_kabi_reserved3', at offset 1152 (in bits) at usb.h:482:1 'u64 usb_bus::android_kabi_reserved4', at offset 1216 (in bits) at usb.h:483:1 54 impacted interfaces: 'struct usb_device at usb.h:631:1' changed: type size changed from 11712 to 11968 (in bits) 4 data member insertions: 'u64 usb_device::android_kabi_reserved1', at offset 11712 (in bits) at usb.h:728:1 'u64 usb_device::android_kabi_reserved2', at offset 11776 (in bits) at usb.h:729:1 'u64 usb_device::android_kabi_reserved3', at offset 11840 (in bits) at usb.h:730:1 'u64 usb_device::android_kabi_reserved4', at offset 11904 (in bits) at usb.h:731:1 54 impacted interfaces: 'struct usb_driver at usb.h:1183:1' changed: type size changed from 2432 to 2688 (in bits) 4 data member insertions: 'u64 usb_driver::android_kabi_reserved1', at offset 2432 (in bits) at usb.h:1232:1 'u64 usb_driver::android_kabi_reserved2', at offset 2496 (in bits) at usb.h:1233:1 'u64 usb_driver::android_kabi_reserved3', at offset 2560 (in bits) at usb.h:1234:1 'u64 usb_driver::android_kabi_reserved4', at offset 2624 (in bits) at usb.h:1235:1 4 impacted interfaces: 'struct usb_hcd at hcd.h:81:1' changed: type size changed from 4736 to 5248 (in bits) 4 data member insertions: 'u64 usb_hcd::android_kabi_reserved1', at offset 4992 (in bits) at hcd.h:229:1 'u64 usb_hcd::android_kabi_reserved2', at offset 5056 (in bits) at hcd.h:230:1 'u64 usb_hcd::android_kabi_reserved3', at offset 5120 (in bits) at hcd.h:231:1 'u64 usb_hcd::android_kabi_reserved4', at offset 5184 (in bits) at hcd.h:232:1 16 impacted interfaces: 'struct usb_host_bos at usb.h:396:1' changed: type size changed from 384 to 640 (in bits) 4 data member insertions: 'u64 usb_host_bos::android_kabi_reserved1', at offset 384 (in bits) at usb.h:412:1 'u64 usb_host_bos::android_kabi_reserved2', at offset 448 (in bits) at usb.h:413:1 'u64 usb_host_bos::android_kabi_reserved3', at offset 512 (in bits) at usb.h:414:1 'u64 usb_host_bos::android_kabi_reserved4', at offset 576 (in bits) at usb.h:415:1 54 impacted interfaces: 'struct usb_interface at usb.h:232:1' changed: type size changed from 7360 to 7616 (in bits) 4 data member insertions: 'u64 usb_interface::android_kabi_reserved1', at offset 7360 (in bits) at usb.h:262:1 'u64 usb_interface::android_kabi_reserved2', at offset 7424 (in bits) at usb.h:263:1 'u64 usb_interface::android_kabi_reserved3', at offset 7488 (in bits) at usb.h:264:1 'u64 usb_interface::android_kabi_reserved4', at offset 7552 (in bits) at usb.h:265:1 73 impacted interfaces: 'struct usbnet at usbnet.h:27:1' changed: type size changed from 4736 to 4992 (in bits) 4 data member insertions: 'u64 usbnet::android_kabi_reserved1', at offset 4736 (in bits) at usbnet.h:89:1 'u64 usbnet::android_kabi_reserved2', at offset 4800 (in bits) at usbnet.h:90:1 'u64 usbnet::android_kabi_reserved3', at offset 4864 (in bits) at usbnet.h:91:1 'u64 usbnet::android_kabi_reserved4', at offset 4928 (in bits) at usbnet.h:92:1 10 impacted interfaces: Bug: 151154716 Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sandeep Patil Change-Id: Ie9e246d9333ac70fc9cc2b0bf7cb466a8ffdb6de --- include/linux/usb.h | 32 ++++++++++++++++++++++++++++++++ include/linux/usb/hcd.h | 16 ++++++++++++++++ include/linux/usb/usbnet.h | 9 +++++++++ 3 files changed, 57 insertions(+) diff --git a/include/linux/usb.h b/include/linux/usb.h index 6c95af3317f7..b40d3a93a2cb 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h @@ -22,6 +22,7 @@ #include /* for current && schedule_timeout */ #include /* for struct mutex */ #include /* for runtime PM */ +#include struct usb_device; struct usb_driver; @@ -257,6 +258,11 @@ struct usb_interface { struct device dev; /* interface specific device info */ struct device *usb_dev; struct work_struct reset_ws; /* for resets in atomic context */ + + ANDROID_KABI_RESERVE(1); + ANDROID_KABI_RESERVE(2); + ANDROID_KABI_RESERVE(3); + ANDROID_KABI_RESERVE(4); }; #define to_usb_interface(d) container_of(d, struct usb_interface, dev) @@ -402,6 +408,11 @@ struct usb_host_bos { struct usb_ssp_cap_descriptor *ssp_cap; struct usb_ss_container_id_descriptor *ss_id; struct usb_ptm_cap_descriptor *ptm_cap; + + ANDROID_KABI_RESERVE(1); + ANDROID_KABI_RESERVE(2); + ANDROID_KABI_RESERVE(3); + ANDROID_KABI_RESERVE(4); }; int __usb_get_extra_descriptor(char *buffer, unsigned size, @@ -465,6 +476,11 @@ struct usb_bus { struct mon_bus *mon_bus; /* non-null when associated */ int monitored; /* non-zero when monitored */ #endif + + ANDROID_KABI_RESERVE(1); + ANDROID_KABI_RESERVE(2); + ANDROID_KABI_RESERVE(3); + ANDROID_KABI_RESERVE(4); }; struct usb_dev_state; @@ -708,6 +724,11 @@ struct usb_device { u16 hub_delay; unsigned use_generic_driver:1; + + ANDROID_KABI_RESERVE(1); + ANDROID_KABI_RESERVE(2); + ANDROID_KABI_RESERVE(3); + ANDROID_KABI_RESERVE(4); }; #define to_usb_device(d) container_of(d, struct usb_device, dev) @@ -1212,6 +1233,11 @@ struct usb_driver { unsigned int supports_autosuspend:1; unsigned int disable_hub_initiated_lpm:1; unsigned int soft_unbind:1; + + ANDROID_KABI_RESERVE(1); + ANDROID_KABI_RESERVE(2); + ANDROID_KABI_RESERVE(3); + ANDROID_KABI_RESERVE(4); }; #define to_usb_driver(d) container_of(d, struct usb_driver, drvwrap.driver) @@ -1595,6 +1621,12 @@ struct urb { int error_count; /* (return) number of ISO errors */ void *context; /* (in) context for completion */ usb_complete_t complete; /* (in) completion routine */ + + ANDROID_KABI_RESERVE(1); + ANDROID_KABI_RESERVE(2); + ANDROID_KABI_RESERVE(3); + ANDROID_KABI_RESERVE(4); + struct usb_iso_packet_descriptor iso_frame_desc[]; /* (in) ISO ONLY */ }; diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h index 78cd566ee238..acb3fe7bde36 100644 --- a/include/linux/usb/hcd.h +++ b/include/linux/usb/hcd.h @@ -11,6 +11,7 @@ #include #include #include +#include #define MAX_TOPO_LEVEL 6 @@ -214,6 +215,11 @@ struct usb_hcd { * (ohci 32, uhci 1024, ehci 256/512/1024). */ + ANDROID_KABI_RESERVE(1); + ANDROID_KABI_RESERVE(2); + ANDROID_KABI_RESERVE(3); + ANDROID_KABI_RESERVE(4); + /* The HC driver's private data is stored at the end of * this structure. */ @@ -402,6 +408,11 @@ struct hc_driver { #define EHSET_TEST_SINGLE_STEP_SET_FEATURE 0x06 int (*submit_single_step_set_feature)(struct usb_hcd *, struct urb *, int); + + ANDROID_KABI_RESERVE(1); + ANDROID_KABI_RESERVE(2); + ANDROID_KABI_RESERVE(3); + ANDROID_KABI_RESERVE(4); }; static inline int hcd_giveback_urb_in_bh(struct usb_hcd *hcd) @@ -560,6 +571,11 @@ struct usb_tt { spinlock_t lock; struct list_head clear_list; /* of usb_tt_clear */ struct work_struct clear_work; + + ANDROID_KABI_RESERVE(1); + ANDROID_KABI_RESERVE(2); + ANDROID_KABI_RESERVE(3); + ANDROID_KABI_RESERVE(4); }; struct usb_tt_clear { diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h index 9f08a584d707..e0a2cdd4f7f0 100644 --- a/include/linux/usb/usbnet.h +++ b/include/linux/usb/usbnet.h @@ -14,6 +14,7 @@ #include #include #include +#include /* interface from usbnet core to each USB networking link we handle */ struct usbnet { @@ -76,6 +77,11 @@ struct usbnet { # define EVENT_LINK_CHANGE 11 # define EVENT_SET_RX_MODE 12 # define EVENT_NO_IP_ALIGN 13 + + ANDROID_KABI_RESERVE(1); + ANDROID_KABI_RESERVE(2); + ANDROID_KABI_RESERVE(3); + ANDROID_KABI_RESERVE(4); }; static inline struct usb_driver *driver_of(struct usb_interface *intf) @@ -165,6 +171,9 @@ struct driver_info { int out; /* tx endpoint */ unsigned long data; /* Misc driver specific data */ + + ANDROID_KABI_RESERVE(1); + ANDROID_KABI_RESERVE(2); }; /* Minidrivers are just drivers using the "usbnet" core as a powerful