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 <oneukum@suse.de> 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🔢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 <gregkh@google.com>
Signed-off-by: Sandeep Patil <sspatil@google.com>
Change-Id: Ie9e246d9333ac70fc9cc2b0bf7cb466a8ffdb6de
This commit is contained in:
Greg Kroah-Hartman
2020-03-10 18:16:26 +01:00
committed by Sandeep Patil
parent 531cba772c
commit fe4ba3ccfc
3 changed files with 57 additions and 0 deletions

View File

@@ -22,6 +22,7 @@
#include <linux/sched.h> /* for current && schedule_timeout */ #include <linux/sched.h> /* for current && schedule_timeout */
#include <linux/mutex.h> /* for struct mutex */ #include <linux/mutex.h> /* for struct mutex */
#include <linux/pm_runtime.h> /* for runtime PM */ #include <linux/pm_runtime.h> /* for runtime PM */
#include <linux/android_kabi.h>
struct usb_device; struct usb_device;
struct usb_driver; struct usb_driver;
@@ -257,6 +258,11 @@ struct usb_interface {
struct device dev; /* interface specific device info */ struct device dev; /* interface specific device info */
struct device *usb_dev; struct device *usb_dev;
struct work_struct reset_ws; /* for resets in atomic context */ 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) #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_ssp_cap_descriptor *ssp_cap;
struct usb_ss_container_id_descriptor *ss_id; struct usb_ss_container_id_descriptor *ss_id;
struct usb_ptm_cap_descriptor *ptm_cap; 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, 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 */ struct mon_bus *mon_bus; /* non-null when associated */
int monitored; /* non-zero when monitored */ int monitored; /* non-zero when monitored */
#endif #endif
ANDROID_KABI_RESERVE(1);
ANDROID_KABI_RESERVE(2);
ANDROID_KABI_RESERVE(3);
ANDROID_KABI_RESERVE(4);
}; };
struct usb_dev_state; struct usb_dev_state;
@@ -709,6 +725,11 @@ struct usb_device {
u16 hub_delay; u16 hub_delay;
unsigned use_generic_driver:1; 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) #define to_usb_device(d) container_of(d, struct usb_device, dev)
@@ -1210,6 +1231,11 @@ struct usb_driver {
unsigned int supports_autosuspend:1; unsigned int supports_autosuspend:1;
unsigned int disable_hub_initiated_lpm:1; unsigned int disable_hub_initiated_lpm:1;
unsigned int soft_unbind: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) #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 */ int error_count; /* (return) number of ISO errors */
void *context; /* (in) context for completion */ void *context; /* (in) context for completion */
usb_complete_t complete; /* (in) completion routine */ 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[]; struct usb_iso_packet_descriptor iso_frame_desc[];
/* (in) ISO ONLY */ /* (in) ISO ONLY */
}; };

View File

@@ -25,6 +25,7 @@
#include <linux/rwsem.h> #include <linux/rwsem.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/idr.h> #include <linux/idr.h>
#include <linux/android_kabi.h>
#define MAX_TOPO_LEVEL 6 #define MAX_TOPO_LEVEL 6
@@ -225,6 +226,11 @@ struct usb_hcd {
* (ohci 32, uhci 1024, ehci 256/512/1024). * (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 /* The HC driver's private data is stored at the end of
* this structure. * this structure.
*/ */
@@ -410,6 +416,10 @@ struct hc_driver {
/* Call for power on/off the port if necessary */ /* Call for power on/off the port if necessary */
int (*port_power)(struct usb_hcd *hcd, int portnum, bool enable); int (*port_power)(struct usb_hcd *hcd, int portnum, bool enable);
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) static inline int hcd_giveback_urb_in_bh(struct usb_hcd *hcd)
@@ -561,6 +571,11 @@ struct usb_tt {
spinlock_t lock; spinlock_t lock;
struct list_head clear_list; /* of usb_tt_clear */ struct list_head clear_list; /* of usb_tt_clear */
struct work_struct clear_work; 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 { struct usb_tt_clear {

View File

@@ -23,6 +23,8 @@
#ifndef __LINUX_USB_USBNET_H #ifndef __LINUX_USB_USBNET_H
#define __LINUX_USB_USBNET_H #define __LINUX_USB_USBNET_H
#include <linux/android_kabi.h>
/* interface from usbnet core to each USB networking link we handle */ /* interface from usbnet core to each USB networking link we handle */
struct usbnet { struct usbnet {
/* housekeeping */ /* housekeeping */
@@ -83,6 +85,11 @@ struct usbnet {
# define EVENT_LINK_CHANGE 11 # define EVENT_LINK_CHANGE 11
# define EVENT_SET_RX_MODE 12 # define EVENT_SET_RX_MODE 12
# define EVENT_NO_IP_ALIGN 13 # 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) static inline struct usb_driver *driver_of(struct usb_interface *intf)
@@ -172,6 +179,9 @@ struct driver_info {
int out; /* tx endpoint */ int out; /* tx endpoint */
unsigned long data; /* Misc driver specific data */ 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 /* Minidrivers are just drivers using the "usbnet" core as a powerful