Changeset View
Changeset View
Standalone View
Standalone View
sys/contrib/libnv/nvlist.c
| Show First 20 Lines • Show All 1,021 Lines • ▼ Show 20 Lines | nvlist_pack(const nvlist_t *nvl, size_t *sizep) | ||||
| return (nvlist_xpack(nvl, NULL, sizep)); | return (nvlist_xpack(nvl, NULL, sizep)); | ||||
| } | } | ||||
| static bool | static bool | ||||
| nvlist_check_header(struct nvlist_header *nvlhdrp) | nvlist_check_header(struct nvlist_header *nvlhdrp) | ||||
| { | { | ||||
| if (nvlhdrp->nvlh_size > SIZE_MAX - sizeof(*nvlhdrp)) { | |||||
| ERRNO_SET(EINVAL); | |||||
| return (false); | |||||
| } | |||||
| if (nvlhdrp->nvlh_magic != NVLIST_HEADER_MAGIC) { | if (nvlhdrp->nvlh_magic != NVLIST_HEADER_MAGIC) { | ||||
| ERRNO_SET(EINVAL); | ERRNO_SET(EINVAL); | ||||
| return (false); | return (false); | ||||
| } | } | ||||
| if ((nvlhdrp->nvlh_flags & ~NV_FLAG_ALL_MASK) != 0) { | if ((nvlhdrp->nvlh_flags & ~NV_FLAG_ALL_MASK) != 0) { | ||||
| ERRNO_SET(EINVAL); | ERRNO_SET(EINVAL); | ||||
| return (false); | return (false); | ||||
| } | } | ||||
| #if BYTE_ORDER == BIG_ENDIAN | #if BYTE_ORDER == BIG_ENDIAN | ||||
| if ((nvlhdrp->nvlh_flags & NV_FLAG_BIG_ENDIAN) == 0) { | if ((nvlhdrp->nvlh_flags & NV_FLAG_BIG_ENDIAN) == 0) { | ||||
| nvlhdrp->nvlh_size = le64toh(nvlhdrp->nvlh_size); | nvlhdrp->nvlh_size = le64toh(nvlhdrp->nvlh_size); | ||||
| nvlhdrp->nvlh_descriptors = le64toh(nvlhdrp->nvlh_descriptors); | nvlhdrp->nvlh_descriptors = le64toh(nvlhdrp->nvlh_descriptors); | ||||
| } | } | ||||
| #else | #else | ||||
| if ((nvlhdrp->nvlh_flags & NV_FLAG_BIG_ENDIAN) != 0) { | if ((nvlhdrp->nvlh_flags & NV_FLAG_BIG_ENDIAN) != 0) { | ||||
| nvlhdrp->nvlh_size = be64toh(nvlhdrp->nvlh_size); | nvlhdrp->nvlh_size = be64toh(nvlhdrp->nvlh_size); | ||||
| nvlhdrp->nvlh_descriptors = be64toh(nvlhdrp->nvlh_descriptors); | nvlhdrp->nvlh_descriptors = be64toh(nvlhdrp->nvlh_descriptors); | ||||
| } | } | ||||
| #endif | #endif | ||||
| if (nvlhdrp->nvlh_size > SIZE_MAX - sizeof(*nvlhdrp)) { | |||||
| ERRNO_SET(EINVAL); | |||||
| return (false); | |||||
| } | |||||
| return (true); | return (true); | ||||
| } | } | ||||
| const unsigned char * | const unsigned char * | ||||
| nvlist_unpack_header(nvlist_t *nvl, const unsigned char *ptr, size_t nfds, | nvlist_unpack_header(nvlist_t *nvl, const unsigned char *ptr, size_t nfds, | ||||
| bool *isbep, size_t *leftp) | bool *isbep, size_t *leftp) | ||||
| { | { | ||||
| struct nvlist_header nvlhdr; | struct nvlist_header nvlhdr; | ||||
| ▲ Show 20 Lines • Show All 1,003 Lines • Show Last 20 Lines | |||||