Message ID | 1471575460-13421-2-git-send-email-ivan.hu@canonical.com |
---|---|
State | Accepted |
Headers | show |
On 19/08/16 03:57, Ivan Hu wrote: > Signed-off-by: Ivan Hu <ivan.hu@canonical.com> > --- > efi_runtime/efi_runtime.c | 42 +++++++++++++++++--------------- > efi_runtime/efi_runtime.h | 62 +++++++++++++++++++++++------------------------ > 2 files changed, 54 insertions(+), 50 deletions(-) > > diff --git a/efi_runtime/efi_runtime.c b/efi_runtime/efi_runtime.c > index daf8625..46baedf 100644 > --- a/efi_runtime/efi_runtime.c > +++ b/efi_runtime/efi_runtime.c > @@ -47,16 +47,16 @@ MODULE_LICENSE("GPL"); > * Note this function returns the number of *bytes*, not the number of > * ucs2 characters. > */ > -static inline size_t user_ucs2_strsize(uint16_t __user *str) > +static inline size_t user_ucs2_strsize(efi_char16_t __user *str) > { > - uint16_t *s = str, c; > + efi_char16_t *s = str, c; > size_t len; > > if (!str) > return 0; > > /* Include terminating NULL */ > - len = sizeof(uint16_t); > + len = sizeof(efi_char16_t); > > if (get_user(c, s++)) { > /* Can't read userspace memory for size */ > @@ -68,7 +68,7 @@ static inline size_t user_ucs2_strsize(uint16_t __user *str) > /* Can't read userspace memory for size */ > return 0; > } > - len += sizeof(uint16_t); > + len += sizeof(efi_char16_t); > } > return len; > } > @@ -77,9 +77,10 @@ static inline size_t user_ucs2_strsize(uint16_t __user *str) > * Allocate a buffer and copy a ucs2 string from user space into it. > */ > static inline int > -copy_ucs2_from_user_len(uint16_t **dst, uint16_t __user *src, size_t len) > +copy_ucs2_from_user_len(efi_char16_t **dst, efi_char16_t __user *src, > + size_t len) > { > - uint16_t *buf; > + efi_char16_t *buf; > > if (!src) { > *dst = NULL; > @@ -109,7 +110,8 @@ copy_ucs2_from_user_len(uint16_t **dst, uint16_t __user *src, size_t len) > * > * Just a wrap for user_ucs2_strsize > */ > -static inline int get_ucs2_strsize_from_user(uint16_t __user *src, size_t *len) > +static inline int > +get_ucs2_strsize_from_user(efi_char16_t __user *src, size_t *len) > { > if (!access_ok(VERIFY_READ, src, 1)) > return -EFAULT; > @@ -133,7 +135,8 @@ static inline int get_ucs2_strsize_from_user(uint16_t __user *src, size_t *len) > * > * It is the caller's responsibility to free 'dst'. > */ > -static inline int copy_ucs2_from_user(uint16_t **dst, uint16_t __user *src) > +static inline int > +copy_ucs2_from_user(efi_char16_t **dst, efi_char16_t __user *src) > { > size_t len; > > @@ -156,7 +159,7 @@ static inline int copy_ucs2_from_user(uint16_t **dst, uint16_t __user *src) > * 'len' specifies the number of bytes to copy. > */ > static inline int > -copy_ucs2_to_user_len(uint16_t __user *dst, uint16_t *src, size_t len) > +copy_ucs2_to_user_len(efi_char16_t __user *dst, efi_char16_t *src, size_t len) > { > if (!src) > return 0; > @@ -174,8 +177,8 @@ static long efi_runtime_get_variable(unsigned long arg) > unsigned long datasize, prev_datasize, *dz; > efi_guid_t vendor_guid, *vd = NULL; > efi_status_t status; > - uint16_t *name = NULL; > - uint32_t attr, *at; > + efi_char16_t *name = NULL; > + u32 attr, *at; > void *data = NULL; > int rv = 0; > > @@ -251,7 +254,7 @@ static long efi_runtime_set_variable(unsigned long arg) > struct efi_setvariable setvariable_local; > efi_guid_t vendor_guid; > efi_status_t status; > - uint16_t *name = NULL; > + efi_char16_t *name = NULL; > void *data; > int rv; > > @@ -265,7 +268,8 @@ static long efi_runtime_set_variable(unsigned long arg) > return -EFAULT; > > if (setvariable_local.variable_name) { > - rv = copy_ucs2_from_user(&name, setvariable_local.variable_name); > + rv = copy_ucs2_from_user(&name, > + setvariable_local.variable_name); > if (rv) > return rv; > } > @@ -356,7 +360,7 @@ static long efi_runtime_get_waketime(unsigned long arg) > { > struct efi_getwakeuptime __user *getwakeuptime; > struct efi_getwakeuptime getwakeuptime_local; > - unsigned char enabled, pending; > + efi_bool_t enabled, pending; > efi_status_t status; > efi_time_t efi_time; > > @@ -388,7 +392,7 @@ static long efi_runtime_set_waketime(unsigned long arg) > { > struct efi_setwakeuptime __user *setwakeuptime; > struct efi_setwakeuptime setwakeuptime_local; > - unsigned char enabled; > + efi_bool_t enabled; > efi_status_t status; > efi_time_t efi_time; > > @@ -423,7 +427,7 @@ static long efi_runtime_get_nextvariablename(unsigned long arg) > efi_status_t status; > efi_guid_t *vd = NULL; > efi_guid_t vendor_guid; > - uint16_t *name = NULL; > + efi_char16_t *name = NULL; > int rv; > > getnextvariablename = (struct efi_getnextvariablename > @@ -509,7 +513,7 @@ static long efi_runtime_get_nexthighmonocount(unsigned long arg) > struct efi_getnexthighmonotoniccount __user *getnexthighmonotoniccount; > struct efi_getnexthighmonotoniccount getnexthighmonotoniccount_local; > efi_status_t status; > - uint32_t count; > + u32 count; > > getnexthighmonotoniccount = (struct > efi_getnexthighmonotoniccount __user *)arg; > @@ -542,7 +546,7 @@ static long efi_runtime_query_variableinfo(unsigned long arg) > struct efi_queryvariableinfo __user *queryvariableinfo; > struct efi_queryvariableinfo queryvariableinfo_local; > efi_status_t status; > - uint64_t max_storage, remaining, max_size; > + u64 max_storage, remaining, max_size; > > queryvariableinfo = (struct efi_queryvariableinfo __user *)arg; > > @@ -578,7 +582,7 @@ static long efi_runtime_query_capsulecaps(unsigned long arg) > struct efi_querycapsulecapabilities caps; > efi_capsule_header_t *capsules; > efi_status_t status; > - uint64_t max_size; > + u64 max_size; > int i, reset_type; > int rv; > > diff --git a/efi_runtime/efi_runtime.h b/efi_runtime/efi_runtime.h > index 9167688..b3da40e 100644 > --- a/efi_runtime/efi_runtime.h > +++ b/efi_runtime/efi_runtime.h > @@ -25,73 +25,73 @@ > #include <linux/efi.h> > > struct efi_getvariable { > - uint16_t *variable_name; > + efi_char16_t *variable_name; > efi_guid_t *vendor_guid; > - uint32_t *attributes; > - uint64_t *data_size; > + u32 *attributes; > + unsigned long *data_size; I know UEFI is currently just 64 bit support, so unsigned longs are 64 bits in this case, but why aren't we using u64 instead? Any reason? > void *data; > - uint64_t *status; > + efi_status_t *status; > } __packed; > > struct efi_setvariable { > - uint16_t *variable_name; > + efi_char16_t *variable_name; > efi_guid_t *vendor_guid; > - uint32_t attributes; > - uint64_t data_size; > + u32 attributes; > + unsigned long data_size; > void *data; > - uint64_t *status; > + efi_status_t *status; > } __packed; > > struct efi_getnextvariablename { > - uint64_t *variable_name_size; > - uint16_t *variable_name; > + unsigned long *variable_name_size; > + efi_char16_t *variable_name; > efi_guid_t *vendor_guid; > - uint64_t *status; > + efi_status_t *status; > } __packed; > > struct efi_queryvariableinfo { > - uint32_t attributes; > - uint64_t *maximum_variable_storage_size; > - uint64_t *remaining_variable_storage_size; > - uint64_t *maximum_variable_size; > - uint64_t *status; > + u32 attributes; > + u64 *maximum_variable_storage_size; > + u64 *remaining_variable_storage_size; > + u64 *maximum_variable_size; > + efi_status_t *status; > } __packed; > > struct efi_gettime { > - efi_time_t *time; > - efi_time_cap_t *capabilities; > - uint64_t *status; > + efi_time_t *time; > + efi_time_cap_t *capabilities; > + efi_status_t *status; > } __packed; > > struct efi_settime { > - efi_time_t *time; > - uint64_t *status; > + efi_time_t *time; > + efi_status_t *status; > } __packed; > > struct efi_getwakeuptime { > - uint8_t *enabled; > - uint8_t *pending; > + efi_bool_t *enabled; > + efi_bool_t *pending; > efi_time_t *time; > - uint64_t *status; > + efi_status_t *status; > } __packed; > > struct efi_setwakeuptime { > - uint8_t enabled; > + efi_bool_t enabled; > efi_time_t *time; > - uint64_t *status; > + efi_status_t *status; > } __packed; > > struct efi_getnexthighmonotoniccount { > - uint32_t *high_count; > - uint64_t *status; > + u32 *high_count; > + efi_status_t *status; > } __packed; > > struct efi_querycapsulecapabilities { > efi_capsule_header_t **capsule_header_array; > - uint64_t capsule_count; > - uint64_t *maximum_capsule_size; > + unsigned long capsule_count; > + u64 *maximum_capsule_size; > int *reset_type; > - uint64_t *status; > + efi_status_t *status; > } __packed; > > /* ioctl calls that are permitted to the /dev/efi_runtime interface. */ >
On 2016年08月19日 15:17, Colin Ian King wrote: > On 19/08/16 03:57, Ivan Hu wrote: >> Signed-off-by: Ivan Hu <ivan.hu@canonical.com> >> --- >> efi_runtime/efi_runtime.c | 42 +++++++++++++++++--------------- >> efi_runtime/efi_runtime.h | 62 +++++++++++++++++++++++------------------------ >> 2 files changed, 54 insertions(+), 50 deletions(-) >> >> diff --git a/efi_runtime/efi_runtime.c b/efi_runtime/efi_runtime.c >> index daf8625..46baedf 100644 >> --- a/efi_runtime/efi_runtime.c >> +++ b/efi_runtime/efi_runtime.c >> @@ -47,16 +47,16 @@ MODULE_LICENSE("GPL"); >> * Note this function returns the number of *bytes*, not the number of >> * ucs2 characters. >> */ >> -static inline size_t user_ucs2_strsize(uint16_t __user *str) >> +static inline size_t user_ucs2_strsize(efi_char16_t __user *str) >> { >> - uint16_t *s = str, c; >> + efi_char16_t *s = str, c; >> size_t len; >> >> if (!str) >> return 0; >> >> /* Include terminating NULL */ >> - len = sizeof(uint16_t); >> + len = sizeof(efi_char16_t); >> >> if (get_user(c, s++)) { >> /* Can't read userspace memory for size */ >> @@ -68,7 +68,7 @@ static inline size_t user_ucs2_strsize(uint16_t __user *str) >> /* Can't read userspace memory for size */ >> return 0; >> } >> - len += sizeof(uint16_t); >> + len += sizeof(efi_char16_t); >> } >> return len; >> } >> @@ -77,9 +77,10 @@ static inline size_t user_ucs2_strsize(uint16_t __user *str) >> * Allocate a buffer and copy a ucs2 string from user space into it. >> */ >> static inline int >> -copy_ucs2_from_user_len(uint16_t **dst, uint16_t __user *src, size_t len) >> +copy_ucs2_from_user_len(efi_char16_t **dst, efi_char16_t __user *src, >> + size_t len) >> { >> - uint16_t *buf; >> + efi_char16_t *buf; >> >> if (!src) { >> *dst = NULL; >> @@ -109,7 +110,8 @@ copy_ucs2_from_user_len(uint16_t **dst, uint16_t __user *src, size_t len) >> * >> * Just a wrap for user_ucs2_strsize >> */ >> -static inline int get_ucs2_strsize_from_user(uint16_t __user *src, size_t *len) >> +static inline int >> +get_ucs2_strsize_from_user(efi_char16_t __user *src, size_t *len) >> { >> if (!access_ok(VERIFY_READ, src, 1)) >> return -EFAULT; >> @@ -133,7 +135,8 @@ static inline int get_ucs2_strsize_from_user(uint16_t __user *src, size_t *len) >> * >> * It is the caller's responsibility to free 'dst'. >> */ >> -static inline int copy_ucs2_from_user(uint16_t **dst, uint16_t __user *src) >> +static inline int >> +copy_ucs2_from_user(efi_char16_t **dst, efi_char16_t __user *src) >> { >> size_t len; >> >> @@ -156,7 +159,7 @@ static inline int copy_ucs2_from_user(uint16_t **dst, uint16_t __user *src) >> * 'len' specifies the number of bytes to copy. >> */ >> static inline int >> -copy_ucs2_to_user_len(uint16_t __user *dst, uint16_t *src, size_t len) >> +copy_ucs2_to_user_len(efi_char16_t __user *dst, efi_char16_t *src, size_t len) >> { >> if (!src) >> return 0; >> @@ -174,8 +177,8 @@ static long efi_runtime_get_variable(unsigned long arg) >> unsigned long datasize, prev_datasize, *dz; >> efi_guid_t vendor_guid, *vd = NULL; >> efi_status_t status; >> - uint16_t *name = NULL; >> - uint32_t attr, *at; >> + efi_char16_t *name = NULL; >> + u32 attr, *at; >> void *data = NULL; >> int rv = 0; >> >> @@ -251,7 +254,7 @@ static long efi_runtime_set_variable(unsigned long arg) >> struct efi_setvariable setvariable_local; >> efi_guid_t vendor_guid; >> efi_status_t status; >> - uint16_t *name = NULL; >> + efi_char16_t *name = NULL; >> void *data; >> int rv; >> >> @@ -265,7 +268,8 @@ static long efi_runtime_set_variable(unsigned long arg) >> return -EFAULT; >> >> if (setvariable_local.variable_name) { >> - rv = copy_ucs2_from_user(&name, setvariable_local.variable_name); >> + rv = copy_ucs2_from_user(&name, >> + setvariable_local.variable_name); >> if (rv) >> return rv; >> } >> @@ -356,7 +360,7 @@ static long efi_runtime_get_waketime(unsigned long arg) >> { >> struct efi_getwakeuptime __user *getwakeuptime; >> struct efi_getwakeuptime getwakeuptime_local; >> - unsigned char enabled, pending; >> + efi_bool_t enabled, pending; >> efi_status_t status; >> efi_time_t efi_time; >> >> @@ -388,7 +392,7 @@ static long efi_runtime_set_waketime(unsigned long arg) >> { >> struct efi_setwakeuptime __user *setwakeuptime; >> struct efi_setwakeuptime setwakeuptime_local; >> - unsigned char enabled; >> + efi_bool_t enabled; >> efi_status_t status; >> efi_time_t efi_time; >> >> @@ -423,7 +427,7 @@ static long efi_runtime_get_nextvariablename(unsigned long arg) >> efi_status_t status; >> efi_guid_t *vd = NULL; >> efi_guid_t vendor_guid; >> - uint16_t *name = NULL; >> + efi_char16_t *name = NULL; >> int rv; >> >> getnextvariablename = (struct efi_getnextvariablename >> @@ -509,7 +513,7 @@ static long efi_runtime_get_nexthighmonocount(unsigned long arg) >> struct efi_getnexthighmonotoniccount __user *getnexthighmonotoniccount; >> struct efi_getnexthighmonotoniccount getnexthighmonotoniccount_local; >> efi_status_t status; >> - uint32_t count; >> + u32 count; >> >> getnexthighmonotoniccount = (struct >> efi_getnexthighmonotoniccount __user *)arg; >> @@ -542,7 +546,7 @@ static long efi_runtime_query_variableinfo(unsigned long arg) >> struct efi_queryvariableinfo __user *queryvariableinfo; >> struct efi_queryvariableinfo queryvariableinfo_local; >> efi_status_t status; >> - uint64_t max_storage, remaining, max_size; >> + u64 max_storage, remaining, max_size; >> >> queryvariableinfo = (struct efi_queryvariableinfo __user *)arg; >> >> @@ -578,7 +582,7 @@ static long efi_runtime_query_capsulecaps(unsigned long arg) >> struct efi_querycapsulecapabilities caps; >> efi_capsule_header_t *capsules; >> efi_status_t status; >> - uint64_t max_size; >> + u64 max_size; >> int i, reset_type; >> int rv; >> >> diff --git a/efi_runtime/efi_runtime.h b/efi_runtime/efi_runtime.h >> index 9167688..b3da40e 100644 >> --- a/efi_runtime/efi_runtime.h >> +++ b/efi_runtime/efi_runtime.h >> @@ -25,73 +25,73 @@ >> #include <linux/efi.h> >> >> struct efi_getvariable { >> - uint16_t *variable_name; >> + efi_char16_t *variable_name; >> efi_guid_t *vendor_guid; >> - uint32_t *attributes; >> - uint64_t *data_size; >> + u32 *attributes; >> + unsigned long *data_size; > I know UEFI is currently just 64 bit support, so unsigned longs are 64 > bits in this case, but why aren't we using u64 instead? Any reason? Just simply follow the type defined on efi.h typedef efi_status_t efi_get_variable_t (efi_char16_t *name, efi_guid_t *vendor, u32 *attr, unsigned long *data_size, void *data); > >> void *data; >> - uint64_t *status; >> + efi_status_t *status; >> } __packed; >> >> struct efi_setvariable { >> - uint16_t *variable_name; >> + efi_char16_t *variable_name; >> efi_guid_t *vendor_guid; >> - uint32_t attributes; >> - uint64_t data_size; >> + u32 attributes; >> + unsigned long data_size; >> void *data; >> - uint64_t *status; >> + efi_status_t *status; >> } __packed; >> >> struct efi_getnextvariablename { >> - uint64_t *variable_name_size; >> - uint16_t *variable_name; >> + unsigned long *variable_name_size; >> + efi_char16_t *variable_name; >> efi_guid_t *vendor_guid; >> - uint64_t *status; >> + efi_status_t *status; >> } __packed; >> >> struct efi_queryvariableinfo { >> - uint32_t attributes; >> - uint64_t *maximum_variable_storage_size; >> - uint64_t *remaining_variable_storage_size; >> - uint64_t *maximum_variable_size; >> - uint64_t *status; >> + u32 attributes; >> + u64 *maximum_variable_storage_size; >> + u64 *remaining_variable_storage_size; >> + u64 *maximum_variable_size; >> + efi_status_t *status; >> } __packed; >> >> struct efi_gettime { >> - efi_time_t *time; >> - efi_time_cap_t *capabilities; >> - uint64_t *status; >> + efi_time_t *time; >> + efi_time_cap_t *capabilities; >> + efi_status_t *status; >> } __packed; >> >> struct efi_settime { >> - efi_time_t *time; >> - uint64_t *status; >> + efi_time_t *time; >> + efi_status_t *status; >> } __packed; >> >> struct efi_getwakeuptime { >> - uint8_t *enabled; >> - uint8_t *pending; >> + efi_bool_t *enabled; >> + efi_bool_t *pending; >> efi_time_t *time; >> - uint64_t *status; >> + efi_status_t *status; >> } __packed; >> >> struct efi_setwakeuptime { >> - uint8_t enabled; >> + efi_bool_t enabled; >> efi_time_t *time; >> - uint64_t *status; >> + efi_status_t *status; >> } __packed; >> >> struct efi_getnexthighmonotoniccount { >> - uint32_t *high_count; >> - uint64_t *status; >> + u32 *high_count; >> + efi_status_t *status; >> } __packed; >> >> struct efi_querycapsulecapabilities { >> efi_capsule_header_t **capsule_header_array; >> - uint64_t capsule_count; >> - uint64_t *maximum_capsule_size; >> + unsigned long capsule_count; >> + u64 *maximum_capsule_size; >> int *reset_type; >> - uint64_t *status; >> + efi_status_t *status; >> } __packed; >> >> /* ioctl calls that are permitted to the /dev/efi_runtime interface. */ >>
On 19/08/16 08:34, ivanhu wrote: > > > On 2016年08月19日 15:17, Colin Ian King wrote: >> On 19/08/16 03:57, Ivan Hu wrote: >>> Signed-off-by: Ivan Hu <ivan.hu@canonical.com> >>> --- >>> efi_runtime/efi_runtime.c | 42 +++++++++++++++++--------------- >>> efi_runtime/efi_runtime.h | 62 >>> +++++++++++++++++++++++------------------------ >>> 2 files changed, 54 insertions(+), 50 deletions(-) >>> >>> diff --git a/efi_runtime/efi_runtime.c b/efi_runtime/efi_runtime.c >>> index daf8625..46baedf 100644 >>> --- a/efi_runtime/efi_runtime.c >>> +++ b/efi_runtime/efi_runtime.c >>> @@ -47,16 +47,16 @@ MODULE_LICENSE("GPL"); >>> * Note this function returns the number of *bytes*, not the number of >>> * ucs2 characters. >>> */ >>> -static inline size_t user_ucs2_strsize(uint16_t __user *str) >>> +static inline size_t user_ucs2_strsize(efi_char16_t __user *str) >>> { >>> - uint16_t *s = str, c; >>> + efi_char16_t *s = str, c; >>> size_t len; >>> if (!str) >>> return 0; >>> /* Include terminating NULL */ >>> - len = sizeof(uint16_t); >>> + len = sizeof(efi_char16_t); >>> if (get_user(c, s++)) { >>> /* Can't read userspace memory for size */ >>> @@ -68,7 +68,7 @@ static inline size_t user_ucs2_strsize(uint16_t >>> __user *str) >>> /* Can't read userspace memory for size */ >>> return 0; >>> } >>> - len += sizeof(uint16_t); >>> + len += sizeof(efi_char16_t); >>> } >>> return len; >>> } >>> @@ -77,9 +77,10 @@ static inline size_t user_ucs2_strsize(uint16_t >>> __user *str) >>> * Allocate a buffer and copy a ucs2 string from user space into it. >>> */ >>> static inline int >>> -copy_ucs2_from_user_len(uint16_t **dst, uint16_t __user *src, size_t >>> len) >>> +copy_ucs2_from_user_len(efi_char16_t **dst, efi_char16_t __user *src, >>> + size_t len) >>> { >>> - uint16_t *buf; >>> + efi_char16_t *buf; >>> if (!src) { >>> *dst = NULL; >>> @@ -109,7 +110,8 @@ copy_ucs2_from_user_len(uint16_t **dst, uint16_t >>> __user *src, size_t len) >>> * >>> * Just a wrap for user_ucs2_strsize >>> */ >>> -static inline int get_ucs2_strsize_from_user(uint16_t __user *src, >>> size_t *len) >>> +static inline int >>> +get_ucs2_strsize_from_user(efi_char16_t __user *src, size_t *len) >>> { >>> if (!access_ok(VERIFY_READ, src, 1)) >>> return -EFAULT; >>> @@ -133,7 +135,8 @@ static inline int >>> get_ucs2_strsize_from_user(uint16_t __user *src, size_t *len) >>> * >>> * It is the caller's responsibility to free 'dst'. >>> */ >>> -static inline int copy_ucs2_from_user(uint16_t **dst, uint16_t >>> __user *src) >>> +static inline int >>> +copy_ucs2_from_user(efi_char16_t **dst, efi_char16_t __user *src) >>> { >>> size_t len; >>> @@ -156,7 +159,7 @@ static inline int copy_ucs2_from_user(uint16_t >>> **dst, uint16_t __user *src) >>> * 'len' specifies the number of bytes to copy. >>> */ >>> static inline int >>> -copy_ucs2_to_user_len(uint16_t __user *dst, uint16_t *src, size_t len) >>> +copy_ucs2_to_user_len(efi_char16_t __user *dst, efi_char16_t *src, >>> size_t len) >>> { >>> if (!src) >>> return 0; >>> @@ -174,8 +177,8 @@ static long efi_runtime_get_variable(unsigned >>> long arg) >>> unsigned long datasize, prev_datasize, *dz; >>> efi_guid_t vendor_guid, *vd = NULL; >>> efi_status_t status; >>> - uint16_t *name = NULL; >>> - uint32_t attr, *at; >>> + efi_char16_t *name = NULL; >>> + u32 attr, *at; >>> void *data = NULL; >>> int rv = 0; >>> @@ -251,7 +254,7 @@ static long efi_runtime_set_variable(unsigned >>> long arg) >>> struct efi_setvariable setvariable_local; >>> efi_guid_t vendor_guid; >>> efi_status_t status; >>> - uint16_t *name = NULL; >>> + efi_char16_t *name = NULL; >>> void *data; >>> int rv; >>> @@ -265,7 +268,8 @@ static long efi_runtime_set_variable(unsigned >>> long arg) >>> return -EFAULT; >>> if (setvariable_local.variable_name) { >>> - rv = copy_ucs2_from_user(&name, >>> setvariable_local.variable_name); >>> + rv = copy_ucs2_from_user(&name, >>> + setvariable_local.variable_name); >>> if (rv) >>> return rv; >>> } >>> @@ -356,7 +360,7 @@ static long efi_runtime_get_waketime(unsigned >>> long arg) >>> { >>> struct efi_getwakeuptime __user *getwakeuptime; >>> struct efi_getwakeuptime getwakeuptime_local; >>> - unsigned char enabled, pending; >>> + efi_bool_t enabled, pending; >>> efi_status_t status; >>> efi_time_t efi_time; >>> @@ -388,7 +392,7 @@ static long efi_runtime_set_waketime(unsigned >>> long arg) >>> { >>> struct efi_setwakeuptime __user *setwakeuptime; >>> struct efi_setwakeuptime setwakeuptime_local; >>> - unsigned char enabled; >>> + efi_bool_t enabled; >>> efi_status_t status; >>> efi_time_t efi_time; >>> @@ -423,7 +427,7 @@ static long >>> efi_runtime_get_nextvariablename(unsigned long arg) >>> efi_status_t status; >>> efi_guid_t *vd = NULL; >>> efi_guid_t vendor_guid; >>> - uint16_t *name = NULL; >>> + efi_char16_t *name = NULL; >>> int rv; >>> getnextvariablename = (struct efi_getnextvariablename >>> @@ -509,7 +513,7 @@ static long >>> efi_runtime_get_nexthighmonocount(unsigned long arg) >>> struct efi_getnexthighmonotoniccount __user >>> *getnexthighmonotoniccount; >>> struct efi_getnexthighmonotoniccount >>> getnexthighmonotoniccount_local; >>> efi_status_t status; >>> - uint32_t count; >>> + u32 count; >>> getnexthighmonotoniccount = (struct >>> efi_getnexthighmonotoniccount __user *)arg; >>> @@ -542,7 +546,7 @@ static long >>> efi_runtime_query_variableinfo(unsigned long arg) >>> struct efi_queryvariableinfo __user *queryvariableinfo; >>> struct efi_queryvariableinfo queryvariableinfo_local; >>> efi_status_t status; >>> - uint64_t max_storage, remaining, max_size; >>> + u64 max_storage, remaining, max_size; >>> queryvariableinfo = (struct efi_queryvariableinfo __user *)arg; >>> @@ -578,7 +582,7 @@ static long >>> efi_runtime_query_capsulecaps(unsigned long arg) >>> struct efi_querycapsulecapabilities caps; >>> efi_capsule_header_t *capsules; >>> efi_status_t status; >>> - uint64_t max_size; >>> + u64 max_size; >>> int i, reset_type; >>> int rv; >>> diff --git a/efi_runtime/efi_runtime.h b/efi_runtime/efi_runtime.h >>> index 9167688..b3da40e 100644 >>> --- a/efi_runtime/efi_runtime.h >>> +++ b/efi_runtime/efi_runtime.h >>> @@ -25,73 +25,73 @@ >>> #include <linux/efi.h> >>> struct efi_getvariable { >>> - uint16_t *variable_name; >>> + efi_char16_t *variable_name; >>> efi_guid_t *vendor_guid; >>> - uint32_t *attributes; >>> - uint64_t *data_size; >>> + u32 *attributes; >>> + unsigned long *data_size; >> I know UEFI is currently just 64 bit support, so unsigned longs are 64 >> bits in this case, but why aren't we using u64 instead? Any reason? > Just simply follow the type defined on efi.h > > typedef efi_status_t efi_get_variable_t (efi_char16_t *name, efi_guid_t > *vendor, u32 *attr, > unsigned long *data_size, void *data); Ah, thanks for the clarification. That makes sense. >> >>> void *data; >>> - uint64_t *status; >>> + efi_status_t *status; >>> } __packed; >>> struct efi_setvariable { >>> - uint16_t *variable_name; >>> + efi_char16_t *variable_name; >>> efi_guid_t *vendor_guid; >>> - uint32_t attributes; >>> - uint64_t data_size; >>> + u32 attributes; >>> + unsigned long data_size; >>> void *data; >>> - uint64_t *status; >>> + efi_status_t *status; >>> } __packed; >>> struct efi_getnextvariablename { >>> - uint64_t *variable_name_size; >>> - uint16_t *variable_name; >>> + unsigned long *variable_name_size; >>> + efi_char16_t *variable_name; >>> efi_guid_t *vendor_guid; >>> - uint64_t *status; >>> + efi_status_t *status; >>> } __packed; >>> struct efi_queryvariableinfo { >>> - uint32_t attributes; >>> - uint64_t *maximum_variable_storage_size; >>> - uint64_t *remaining_variable_storage_size; >>> - uint64_t *maximum_variable_size; >>> - uint64_t *status; >>> + u32 attributes; >>> + u64 *maximum_variable_storage_size; >>> + u64 *remaining_variable_storage_size; >>> + u64 *maximum_variable_size; >>> + efi_status_t *status; >>> } __packed; >>> struct efi_gettime { >>> - efi_time_t *time; >>> - efi_time_cap_t *capabilities; >>> - uint64_t *status; >>> + efi_time_t *time; >>> + efi_time_cap_t *capabilities; >>> + efi_status_t *status; >>> } __packed; >>> struct efi_settime { >>> - efi_time_t *time; >>> - uint64_t *status; >>> + efi_time_t *time; >>> + efi_status_t *status; >>> } __packed; >>> struct efi_getwakeuptime { >>> - uint8_t *enabled; >>> - uint8_t *pending; >>> + efi_bool_t *enabled; >>> + efi_bool_t *pending; >>> efi_time_t *time; >>> - uint64_t *status; >>> + efi_status_t *status; >>> } __packed; >>> struct efi_setwakeuptime { >>> - uint8_t enabled; >>> + efi_bool_t enabled; >>> efi_time_t *time; >>> - uint64_t *status; >>> + efi_status_t *status; >>> } __packed; >>> struct efi_getnexthighmonotoniccount { >>> - uint32_t *high_count; >>> - uint64_t *status; >>> + u32 *high_count; >>> + efi_status_t *status; >>> } __packed; >>> struct efi_querycapsulecapabilities { >>> efi_capsule_header_t **capsule_header_array; >>> - uint64_t capsule_count; >>> - uint64_t *maximum_capsule_size; >>> + unsigned long capsule_count; >>> + u64 *maximum_capsule_size; >>> int *reset_type; >>> - uint64_t *status; >>> + efi_status_t *status; >>> } __packed; >>> /* ioctl calls that are permitted to the /dev/efi_runtime >>> interface. */ >>> >
On 19/08/16 03:57, Ivan Hu wrote: > Signed-off-by: Ivan Hu <ivan.hu@canonical.com> > --- > efi_runtime/efi_runtime.c | 42 +++++++++++++++++--------------- > efi_runtime/efi_runtime.h | 62 +++++++++++++++++++++++------------------------ > 2 files changed, 54 insertions(+), 50 deletions(-) > > diff --git a/efi_runtime/efi_runtime.c b/efi_runtime/efi_runtime.c > index daf8625..46baedf 100644 > --- a/efi_runtime/efi_runtime.c > +++ b/efi_runtime/efi_runtime.c > @@ -47,16 +47,16 @@ MODULE_LICENSE("GPL"); > * Note this function returns the number of *bytes*, not the number of > * ucs2 characters. > */ > -static inline size_t user_ucs2_strsize(uint16_t __user *str) > +static inline size_t user_ucs2_strsize(efi_char16_t __user *str) > { > - uint16_t *s = str, c; > + efi_char16_t *s = str, c; > size_t len; > > if (!str) > return 0; > > /* Include terminating NULL */ > - len = sizeof(uint16_t); > + len = sizeof(efi_char16_t); > > if (get_user(c, s++)) { > /* Can't read userspace memory for size */ > @@ -68,7 +68,7 @@ static inline size_t user_ucs2_strsize(uint16_t __user *str) > /* Can't read userspace memory for size */ > return 0; > } > - len += sizeof(uint16_t); > + len += sizeof(efi_char16_t); > } > return len; > } > @@ -77,9 +77,10 @@ static inline size_t user_ucs2_strsize(uint16_t __user *str) > * Allocate a buffer and copy a ucs2 string from user space into it. > */ > static inline int > -copy_ucs2_from_user_len(uint16_t **dst, uint16_t __user *src, size_t len) > +copy_ucs2_from_user_len(efi_char16_t **dst, efi_char16_t __user *src, > + size_t len) > { > - uint16_t *buf; > + efi_char16_t *buf; > > if (!src) { > *dst = NULL; > @@ -109,7 +110,8 @@ copy_ucs2_from_user_len(uint16_t **dst, uint16_t __user *src, size_t len) > * > * Just a wrap for user_ucs2_strsize > */ > -static inline int get_ucs2_strsize_from_user(uint16_t __user *src, size_t *len) > +static inline int > +get_ucs2_strsize_from_user(efi_char16_t __user *src, size_t *len) > { > if (!access_ok(VERIFY_READ, src, 1)) > return -EFAULT; > @@ -133,7 +135,8 @@ static inline int get_ucs2_strsize_from_user(uint16_t __user *src, size_t *len) > * > * It is the caller's responsibility to free 'dst'. > */ > -static inline int copy_ucs2_from_user(uint16_t **dst, uint16_t __user *src) > +static inline int > +copy_ucs2_from_user(efi_char16_t **dst, efi_char16_t __user *src) > { > size_t len; > > @@ -156,7 +159,7 @@ static inline int copy_ucs2_from_user(uint16_t **dst, uint16_t __user *src) > * 'len' specifies the number of bytes to copy. > */ > static inline int > -copy_ucs2_to_user_len(uint16_t __user *dst, uint16_t *src, size_t len) > +copy_ucs2_to_user_len(efi_char16_t __user *dst, efi_char16_t *src, size_t len) > { > if (!src) > return 0; > @@ -174,8 +177,8 @@ static long efi_runtime_get_variable(unsigned long arg) > unsigned long datasize, prev_datasize, *dz; > efi_guid_t vendor_guid, *vd = NULL; > efi_status_t status; > - uint16_t *name = NULL; > - uint32_t attr, *at; > + efi_char16_t *name = NULL; > + u32 attr, *at; > void *data = NULL; > int rv = 0; > > @@ -251,7 +254,7 @@ static long efi_runtime_set_variable(unsigned long arg) > struct efi_setvariable setvariable_local; > efi_guid_t vendor_guid; > efi_status_t status; > - uint16_t *name = NULL; > + efi_char16_t *name = NULL; > void *data; > int rv; > > @@ -265,7 +268,8 @@ static long efi_runtime_set_variable(unsigned long arg) > return -EFAULT; > > if (setvariable_local.variable_name) { > - rv = copy_ucs2_from_user(&name, setvariable_local.variable_name); > + rv = copy_ucs2_from_user(&name, > + setvariable_local.variable_name); > if (rv) > return rv; > } > @@ -356,7 +360,7 @@ static long efi_runtime_get_waketime(unsigned long arg) > { > struct efi_getwakeuptime __user *getwakeuptime; > struct efi_getwakeuptime getwakeuptime_local; > - unsigned char enabled, pending; > + efi_bool_t enabled, pending; > efi_status_t status; > efi_time_t efi_time; > > @@ -388,7 +392,7 @@ static long efi_runtime_set_waketime(unsigned long arg) > { > struct efi_setwakeuptime __user *setwakeuptime; > struct efi_setwakeuptime setwakeuptime_local; > - unsigned char enabled; > + efi_bool_t enabled; > efi_status_t status; > efi_time_t efi_time; > > @@ -423,7 +427,7 @@ static long efi_runtime_get_nextvariablename(unsigned long arg) > efi_status_t status; > efi_guid_t *vd = NULL; > efi_guid_t vendor_guid; > - uint16_t *name = NULL; > + efi_char16_t *name = NULL; > int rv; > > getnextvariablename = (struct efi_getnextvariablename > @@ -509,7 +513,7 @@ static long efi_runtime_get_nexthighmonocount(unsigned long arg) > struct efi_getnexthighmonotoniccount __user *getnexthighmonotoniccount; > struct efi_getnexthighmonotoniccount getnexthighmonotoniccount_local; > efi_status_t status; > - uint32_t count; > + u32 count; > > getnexthighmonotoniccount = (struct > efi_getnexthighmonotoniccount __user *)arg; > @@ -542,7 +546,7 @@ static long efi_runtime_query_variableinfo(unsigned long arg) > struct efi_queryvariableinfo __user *queryvariableinfo; > struct efi_queryvariableinfo queryvariableinfo_local; > efi_status_t status; > - uint64_t max_storage, remaining, max_size; > + u64 max_storage, remaining, max_size; > > queryvariableinfo = (struct efi_queryvariableinfo __user *)arg; > > @@ -578,7 +582,7 @@ static long efi_runtime_query_capsulecaps(unsigned long arg) > struct efi_querycapsulecapabilities caps; > efi_capsule_header_t *capsules; > efi_status_t status; > - uint64_t max_size; > + u64 max_size; > int i, reset_type; > int rv; > > diff --git a/efi_runtime/efi_runtime.h b/efi_runtime/efi_runtime.h > index 9167688..b3da40e 100644 > --- a/efi_runtime/efi_runtime.h > +++ b/efi_runtime/efi_runtime.h > @@ -25,73 +25,73 @@ > #include <linux/efi.h> > > struct efi_getvariable { > - uint16_t *variable_name; > + efi_char16_t *variable_name; > efi_guid_t *vendor_guid; > - uint32_t *attributes; > - uint64_t *data_size; > + u32 *attributes; > + unsigned long *data_size; > void *data; > - uint64_t *status; > + efi_status_t *status; > } __packed; > > struct efi_setvariable { > - uint16_t *variable_name; > + efi_char16_t *variable_name; > efi_guid_t *vendor_guid; > - uint32_t attributes; > - uint64_t data_size; > + u32 attributes; > + unsigned long data_size; > void *data; > - uint64_t *status; > + efi_status_t *status; > } __packed; > > struct efi_getnextvariablename { > - uint64_t *variable_name_size; > - uint16_t *variable_name; > + unsigned long *variable_name_size; > + efi_char16_t *variable_name; > efi_guid_t *vendor_guid; > - uint64_t *status; > + efi_status_t *status; > } __packed; > > struct efi_queryvariableinfo { > - uint32_t attributes; > - uint64_t *maximum_variable_storage_size; > - uint64_t *remaining_variable_storage_size; > - uint64_t *maximum_variable_size; > - uint64_t *status; > + u32 attributes; > + u64 *maximum_variable_storage_size; > + u64 *remaining_variable_storage_size; > + u64 *maximum_variable_size; > + efi_status_t *status; > } __packed; > > struct efi_gettime { > - efi_time_t *time; > - efi_time_cap_t *capabilities; > - uint64_t *status; > + efi_time_t *time; > + efi_time_cap_t *capabilities; > + efi_status_t *status; > } __packed; > > struct efi_settime { > - efi_time_t *time; > - uint64_t *status; > + efi_time_t *time; > + efi_status_t *status; > } __packed; > > struct efi_getwakeuptime { > - uint8_t *enabled; > - uint8_t *pending; > + efi_bool_t *enabled; > + efi_bool_t *pending; > efi_time_t *time; > - uint64_t *status; > + efi_status_t *status; > } __packed; > > struct efi_setwakeuptime { > - uint8_t enabled; > + efi_bool_t enabled; > efi_time_t *time; > - uint64_t *status; > + efi_status_t *status; > } __packed; > > struct efi_getnexthighmonotoniccount { > - uint32_t *high_count; > - uint64_t *status; > + u32 *high_count; > + efi_status_t *status; > } __packed; > > struct efi_querycapsulecapabilities { > efi_capsule_header_t **capsule_header_array; > - uint64_t capsule_count; > - uint64_t *maximum_capsule_size; > + unsigned long capsule_count; > + u64 *maximum_capsule_size; > int *reset_type; > - uint64_t *status; > + efi_status_t *status; > } __packed; > > /* ioctl calls that are permitted to the /dev/efi_runtime interface. */ > Acked-by: Colin Ian King <colin.king@canonical.com>
On 2016-08-19 10:57 AM, Ivan Hu wrote: > Signed-off-by: Ivan Hu <ivan.hu@canonical.com> > --- > efi_runtime/efi_runtime.c | 42 +++++++++++++++++--------------- > efi_runtime/efi_runtime.h | 62 +++++++++++++++++++++++------------------------ > 2 files changed, 54 insertions(+), 50 deletions(-) > > diff --git a/efi_runtime/efi_runtime.c b/efi_runtime/efi_runtime.c > index daf8625..46baedf 100644 > --- a/efi_runtime/efi_runtime.c > +++ b/efi_runtime/efi_runtime.c > @@ -47,16 +47,16 @@ MODULE_LICENSE("GPL"); > * Note this function returns the number of *bytes*, not the number of > * ucs2 characters. > */ > -static inline size_t user_ucs2_strsize(uint16_t __user *str) > +static inline size_t user_ucs2_strsize(efi_char16_t __user *str) > { > - uint16_t *s = str, c; > + efi_char16_t *s = str, c; > size_t len; > > if (!str) > return 0; > > /* Include terminating NULL */ > - len = sizeof(uint16_t); > + len = sizeof(efi_char16_t); > > if (get_user(c, s++)) { > /* Can't read userspace memory for size */ > @@ -68,7 +68,7 @@ static inline size_t user_ucs2_strsize(uint16_t __user *str) > /* Can't read userspace memory for size */ > return 0; > } > - len += sizeof(uint16_t); > + len += sizeof(efi_char16_t); > } > return len; > } > @@ -77,9 +77,10 @@ static inline size_t user_ucs2_strsize(uint16_t __user *str) > * Allocate a buffer and copy a ucs2 string from user space into it. > */ > static inline int > -copy_ucs2_from_user_len(uint16_t **dst, uint16_t __user *src, size_t len) > +copy_ucs2_from_user_len(efi_char16_t **dst, efi_char16_t __user *src, > + size_t len) > { > - uint16_t *buf; > + efi_char16_t *buf; > > if (!src) { > *dst = NULL; > @@ -109,7 +110,8 @@ copy_ucs2_from_user_len(uint16_t **dst, uint16_t __user *src, size_t len) > * > * Just a wrap for user_ucs2_strsize > */ > -static inline int get_ucs2_strsize_from_user(uint16_t __user *src, size_t *len) > +static inline int > +get_ucs2_strsize_from_user(efi_char16_t __user *src, size_t *len) > { > if (!access_ok(VERIFY_READ, src, 1)) > return -EFAULT; > @@ -133,7 +135,8 @@ static inline int get_ucs2_strsize_from_user(uint16_t __user *src, size_t *len) > * > * It is the caller's responsibility to free 'dst'. > */ > -static inline int copy_ucs2_from_user(uint16_t **dst, uint16_t __user *src) > +static inline int > +copy_ucs2_from_user(efi_char16_t **dst, efi_char16_t __user *src) > { > size_t len; > > @@ -156,7 +159,7 @@ static inline int copy_ucs2_from_user(uint16_t **dst, uint16_t __user *src) > * 'len' specifies the number of bytes to copy. > */ > static inline int > -copy_ucs2_to_user_len(uint16_t __user *dst, uint16_t *src, size_t len) > +copy_ucs2_to_user_len(efi_char16_t __user *dst, efi_char16_t *src, size_t len) > { > if (!src) > return 0; > @@ -174,8 +177,8 @@ static long efi_runtime_get_variable(unsigned long arg) > unsigned long datasize, prev_datasize, *dz; > efi_guid_t vendor_guid, *vd = NULL; > efi_status_t status; > - uint16_t *name = NULL; > - uint32_t attr, *at; > + efi_char16_t *name = NULL; > + u32 attr, *at; > void *data = NULL; > int rv = 0; > > @@ -251,7 +254,7 @@ static long efi_runtime_set_variable(unsigned long arg) > struct efi_setvariable setvariable_local; > efi_guid_t vendor_guid; > efi_status_t status; > - uint16_t *name = NULL; > + efi_char16_t *name = NULL; > void *data; > int rv; > > @@ -265,7 +268,8 @@ static long efi_runtime_set_variable(unsigned long arg) > return -EFAULT; > > if (setvariable_local.variable_name) { > - rv = copy_ucs2_from_user(&name, setvariable_local.variable_name); > + rv = copy_ucs2_from_user(&name, > + setvariable_local.variable_name); > if (rv) > return rv; > } > @@ -356,7 +360,7 @@ static long efi_runtime_get_waketime(unsigned long arg) > { > struct efi_getwakeuptime __user *getwakeuptime; > struct efi_getwakeuptime getwakeuptime_local; > - unsigned char enabled, pending; > + efi_bool_t enabled, pending; > efi_status_t status; > efi_time_t efi_time; > > @@ -388,7 +392,7 @@ static long efi_runtime_set_waketime(unsigned long arg) > { > struct efi_setwakeuptime __user *setwakeuptime; > struct efi_setwakeuptime setwakeuptime_local; > - unsigned char enabled; > + efi_bool_t enabled; > efi_status_t status; > efi_time_t efi_time; > > @@ -423,7 +427,7 @@ static long efi_runtime_get_nextvariablename(unsigned long arg) > efi_status_t status; > efi_guid_t *vd = NULL; > efi_guid_t vendor_guid; > - uint16_t *name = NULL; > + efi_char16_t *name = NULL; > int rv; > > getnextvariablename = (struct efi_getnextvariablename > @@ -509,7 +513,7 @@ static long efi_runtime_get_nexthighmonocount(unsigned long arg) > struct efi_getnexthighmonotoniccount __user *getnexthighmonotoniccount; > struct efi_getnexthighmonotoniccount getnexthighmonotoniccount_local; > efi_status_t status; > - uint32_t count; > + u32 count; > > getnexthighmonotoniccount = (struct > efi_getnexthighmonotoniccount __user *)arg; > @@ -542,7 +546,7 @@ static long efi_runtime_query_variableinfo(unsigned long arg) > struct efi_queryvariableinfo __user *queryvariableinfo; > struct efi_queryvariableinfo queryvariableinfo_local; > efi_status_t status; > - uint64_t max_storage, remaining, max_size; > + u64 max_storage, remaining, max_size; > > queryvariableinfo = (struct efi_queryvariableinfo __user *)arg; > > @@ -578,7 +582,7 @@ static long efi_runtime_query_capsulecaps(unsigned long arg) > struct efi_querycapsulecapabilities caps; > efi_capsule_header_t *capsules; > efi_status_t status; > - uint64_t max_size; > + u64 max_size; > int i, reset_type; > int rv; > > diff --git a/efi_runtime/efi_runtime.h b/efi_runtime/efi_runtime.h > index 9167688..b3da40e 100644 > --- a/efi_runtime/efi_runtime.h > +++ b/efi_runtime/efi_runtime.h > @@ -25,73 +25,73 @@ > #include <linux/efi.h> > > struct efi_getvariable { > - uint16_t *variable_name; > + efi_char16_t *variable_name; > efi_guid_t *vendor_guid; > - uint32_t *attributes; > - uint64_t *data_size; > + u32 *attributes; > + unsigned long *data_size; > void *data; > - uint64_t *status; > + efi_status_t *status; > } __packed; > > struct efi_setvariable { > - uint16_t *variable_name; > + efi_char16_t *variable_name; > efi_guid_t *vendor_guid; > - uint32_t attributes; > - uint64_t data_size; > + u32 attributes; > + unsigned long data_size; > void *data; > - uint64_t *status; > + efi_status_t *status; > } __packed; > > struct efi_getnextvariablename { > - uint64_t *variable_name_size; > - uint16_t *variable_name; > + unsigned long *variable_name_size; > + efi_char16_t *variable_name; > efi_guid_t *vendor_guid; > - uint64_t *status; > + efi_status_t *status; > } __packed; > > struct efi_queryvariableinfo { > - uint32_t attributes; > - uint64_t *maximum_variable_storage_size; > - uint64_t *remaining_variable_storage_size; > - uint64_t *maximum_variable_size; > - uint64_t *status; > + u32 attributes; > + u64 *maximum_variable_storage_size; > + u64 *remaining_variable_storage_size; > + u64 *maximum_variable_size; > + efi_status_t *status; > } __packed; > > struct efi_gettime { > - efi_time_t *time; > - efi_time_cap_t *capabilities; > - uint64_t *status; > + efi_time_t *time; > + efi_time_cap_t *capabilities; > + efi_status_t *status; > } __packed; > > struct efi_settime { > - efi_time_t *time; > - uint64_t *status; > + efi_time_t *time; > + efi_status_t *status; > } __packed; > > struct efi_getwakeuptime { > - uint8_t *enabled; > - uint8_t *pending; > + efi_bool_t *enabled; > + efi_bool_t *pending; > efi_time_t *time; > - uint64_t *status; > + efi_status_t *status; > } __packed; > > struct efi_setwakeuptime { > - uint8_t enabled; > + efi_bool_t enabled; > efi_time_t *time; > - uint64_t *status; > + efi_status_t *status; > } __packed; > > struct efi_getnexthighmonotoniccount { > - uint32_t *high_count; > - uint64_t *status; > + u32 *high_count; > + efi_status_t *status; > } __packed; > > struct efi_querycapsulecapabilities { > efi_capsule_header_t **capsule_header_array; > - uint64_t capsule_count; > - uint64_t *maximum_capsule_size; > + unsigned long capsule_count; > + u64 *maximum_capsule_size; > int *reset_type; > - uint64_t *status; > + efi_status_t *status; > } __packed; > > /* ioctl calls that are permitted to the /dev/efi_runtime interface. */ > Acked-by: Alex Hung <alex.hung@canonical.com>
diff --git a/efi_runtime/efi_runtime.c b/efi_runtime/efi_runtime.c index daf8625..46baedf 100644 --- a/efi_runtime/efi_runtime.c +++ b/efi_runtime/efi_runtime.c @@ -47,16 +47,16 @@ MODULE_LICENSE("GPL"); * Note this function returns the number of *bytes*, not the number of * ucs2 characters. */ -static inline size_t user_ucs2_strsize(uint16_t __user *str) +static inline size_t user_ucs2_strsize(efi_char16_t __user *str) { - uint16_t *s = str, c; + efi_char16_t *s = str, c; size_t len; if (!str) return 0; /* Include terminating NULL */ - len = sizeof(uint16_t); + len = sizeof(efi_char16_t); if (get_user(c, s++)) { /* Can't read userspace memory for size */ @@ -68,7 +68,7 @@ static inline size_t user_ucs2_strsize(uint16_t __user *str) /* Can't read userspace memory for size */ return 0; } - len += sizeof(uint16_t); + len += sizeof(efi_char16_t); } return len; } @@ -77,9 +77,10 @@ static inline size_t user_ucs2_strsize(uint16_t __user *str) * Allocate a buffer and copy a ucs2 string from user space into it. */ static inline int -copy_ucs2_from_user_len(uint16_t **dst, uint16_t __user *src, size_t len) +copy_ucs2_from_user_len(efi_char16_t **dst, efi_char16_t __user *src, + size_t len) { - uint16_t *buf; + efi_char16_t *buf; if (!src) { *dst = NULL; @@ -109,7 +110,8 @@ copy_ucs2_from_user_len(uint16_t **dst, uint16_t __user *src, size_t len) * * Just a wrap for user_ucs2_strsize */ -static inline int get_ucs2_strsize_from_user(uint16_t __user *src, size_t *len) +static inline int +get_ucs2_strsize_from_user(efi_char16_t __user *src, size_t *len) { if (!access_ok(VERIFY_READ, src, 1)) return -EFAULT; @@ -133,7 +135,8 @@ static inline int get_ucs2_strsize_from_user(uint16_t __user *src, size_t *len) * * It is the caller's responsibility to free 'dst'. */ -static inline int copy_ucs2_from_user(uint16_t **dst, uint16_t __user *src) +static inline int +copy_ucs2_from_user(efi_char16_t **dst, efi_char16_t __user *src) { size_t len; @@ -156,7 +159,7 @@ static inline int copy_ucs2_from_user(uint16_t **dst, uint16_t __user *src) * 'len' specifies the number of bytes to copy. */ static inline int -copy_ucs2_to_user_len(uint16_t __user *dst, uint16_t *src, size_t len) +copy_ucs2_to_user_len(efi_char16_t __user *dst, efi_char16_t *src, size_t len) { if (!src) return 0; @@ -174,8 +177,8 @@ static long efi_runtime_get_variable(unsigned long arg) unsigned long datasize, prev_datasize, *dz; efi_guid_t vendor_guid, *vd = NULL; efi_status_t status; - uint16_t *name = NULL; - uint32_t attr, *at; + efi_char16_t *name = NULL; + u32 attr, *at; void *data = NULL; int rv = 0; @@ -251,7 +254,7 @@ static long efi_runtime_set_variable(unsigned long arg) struct efi_setvariable setvariable_local; efi_guid_t vendor_guid; efi_status_t status; - uint16_t *name = NULL; + efi_char16_t *name = NULL; void *data; int rv; @@ -265,7 +268,8 @@ static long efi_runtime_set_variable(unsigned long arg) return -EFAULT; if (setvariable_local.variable_name) { - rv = copy_ucs2_from_user(&name, setvariable_local.variable_name); + rv = copy_ucs2_from_user(&name, + setvariable_local.variable_name); if (rv) return rv; } @@ -356,7 +360,7 @@ static long efi_runtime_get_waketime(unsigned long arg) { struct efi_getwakeuptime __user *getwakeuptime; struct efi_getwakeuptime getwakeuptime_local; - unsigned char enabled, pending; + efi_bool_t enabled, pending; efi_status_t status; efi_time_t efi_time; @@ -388,7 +392,7 @@ static long efi_runtime_set_waketime(unsigned long arg) { struct efi_setwakeuptime __user *setwakeuptime; struct efi_setwakeuptime setwakeuptime_local; - unsigned char enabled; + efi_bool_t enabled; efi_status_t status; efi_time_t efi_time; @@ -423,7 +427,7 @@ static long efi_runtime_get_nextvariablename(unsigned long arg) efi_status_t status; efi_guid_t *vd = NULL; efi_guid_t vendor_guid; - uint16_t *name = NULL; + efi_char16_t *name = NULL; int rv; getnextvariablename = (struct efi_getnextvariablename @@ -509,7 +513,7 @@ static long efi_runtime_get_nexthighmonocount(unsigned long arg) struct efi_getnexthighmonotoniccount __user *getnexthighmonotoniccount; struct efi_getnexthighmonotoniccount getnexthighmonotoniccount_local; efi_status_t status; - uint32_t count; + u32 count; getnexthighmonotoniccount = (struct efi_getnexthighmonotoniccount __user *)arg; @@ -542,7 +546,7 @@ static long efi_runtime_query_variableinfo(unsigned long arg) struct efi_queryvariableinfo __user *queryvariableinfo; struct efi_queryvariableinfo queryvariableinfo_local; efi_status_t status; - uint64_t max_storage, remaining, max_size; + u64 max_storage, remaining, max_size; queryvariableinfo = (struct efi_queryvariableinfo __user *)arg; @@ -578,7 +582,7 @@ static long efi_runtime_query_capsulecaps(unsigned long arg) struct efi_querycapsulecapabilities caps; efi_capsule_header_t *capsules; efi_status_t status; - uint64_t max_size; + u64 max_size; int i, reset_type; int rv; diff --git a/efi_runtime/efi_runtime.h b/efi_runtime/efi_runtime.h index 9167688..b3da40e 100644 --- a/efi_runtime/efi_runtime.h +++ b/efi_runtime/efi_runtime.h @@ -25,73 +25,73 @@ #include <linux/efi.h> struct efi_getvariable { - uint16_t *variable_name; + efi_char16_t *variable_name; efi_guid_t *vendor_guid; - uint32_t *attributes; - uint64_t *data_size; + u32 *attributes; + unsigned long *data_size; void *data; - uint64_t *status; + efi_status_t *status; } __packed; struct efi_setvariable { - uint16_t *variable_name; + efi_char16_t *variable_name; efi_guid_t *vendor_guid; - uint32_t attributes; - uint64_t data_size; + u32 attributes; + unsigned long data_size; void *data; - uint64_t *status; + efi_status_t *status; } __packed; struct efi_getnextvariablename { - uint64_t *variable_name_size; - uint16_t *variable_name; + unsigned long *variable_name_size; + efi_char16_t *variable_name; efi_guid_t *vendor_guid; - uint64_t *status; + efi_status_t *status; } __packed; struct efi_queryvariableinfo { - uint32_t attributes; - uint64_t *maximum_variable_storage_size; - uint64_t *remaining_variable_storage_size; - uint64_t *maximum_variable_size; - uint64_t *status; + u32 attributes; + u64 *maximum_variable_storage_size; + u64 *remaining_variable_storage_size; + u64 *maximum_variable_size; + efi_status_t *status; } __packed; struct efi_gettime { - efi_time_t *time; - efi_time_cap_t *capabilities; - uint64_t *status; + efi_time_t *time; + efi_time_cap_t *capabilities; + efi_status_t *status; } __packed; struct efi_settime { - efi_time_t *time; - uint64_t *status; + efi_time_t *time; + efi_status_t *status; } __packed; struct efi_getwakeuptime { - uint8_t *enabled; - uint8_t *pending; + efi_bool_t *enabled; + efi_bool_t *pending; efi_time_t *time; - uint64_t *status; + efi_status_t *status; } __packed; struct efi_setwakeuptime { - uint8_t enabled; + efi_bool_t enabled; efi_time_t *time; - uint64_t *status; + efi_status_t *status; } __packed; struct efi_getnexthighmonotoniccount { - uint32_t *high_count; - uint64_t *status; + u32 *high_count; + efi_status_t *status; } __packed; struct efi_querycapsulecapabilities { efi_capsule_header_t **capsule_header_array; - uint64_t capsule_count; - uint64_t *maximum_capsule_size; + unsigned long capsule_count; + u64 *maximum_capsule_size; int *reset_type; - uint64_t *status; + efi_status_t *status; } __packed; /* ioctl calls that are permitted to the /dev/efi_runtime interface. */
Signed-off-by: Ivan Hu <ivan.hu@canonical.com> --- efi_runtime/efi_runtime.c | 42 +++++++++++++++++--------------- efi_runtime/efi_runtime.h | 62 +++++++++++++++++++++++------------------------ 2 files changed, 54 insertions(+), 50 deletions(-)