From: Jakub Kicinski Date: Fri, 18 Nov 2022 00:19:14 +0000 (-0800) Subject: Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net X-Git-Tag: v6.6.17~5932^2~196 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=224b744abf9f0663ca6762a79c7298b663fa4f04;p=platform%2Fkernel%2Flinux-rpi.git Merge git://git./linux/kernel/git/netdev/net include/linux/bpf.h 1f6e04a1c7b8 ("bpf: Fix offset calculation error in __copy_map_value and zero_map_value") aa3496accc41 ("bpf: Refactor kptr_off_tab into btf_record") f71b2f64177a ("bpf: Refactor map->off_arr handling") https://lore.kernel.org/all/20221114095000.67a73239@canb.auug.org.au/ Signed-off-by: Jakub Kicinski --- 224b744abf9f0663ca6762a79c7298b663fa4f04 diff --cc include/linux/bpf.h index 798aec8,c1bd1bd..c577e4c --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@@ -356,14 -311,13 +356,14 @@@ static inline void bpf_obj_memcpy(struc return; } - for (i = 0; i < map->off_arr->cnt; i++) { - u32 next_off = map->off_arr->field_off[i]; + for (i = 0; i < foffs->cnt; i++) { + u32 next_off = foffs->field_off[i]; + u32 sz = next_off - curr_off; - memcpy(dst + curr_off, src + curr_off, next_off - curr_off); - curr_off = next_off + map->off_arr->field_sz[i]; + memcpy(dst + curr_off, src + curr_off, sz); - curr_off += foffs->field_sz[i]; ++ curr_off = next_off + foffs->field_sz[i]; } - memcpy(dst + curr_off, src + curr_off, map->value_size - curr_off); + memcpy(dst + curr_off, src + curr_off, size - curr_off); } static inline void copy_map_value(struct bpf_map *map, void *dst, void *src) @@@ -386,19 -340,13 +386,19 @@@ static inline void bpf_obj_memzero(stru return; } - for (i = 0; i < map->off_arr->cnt; i++) { - u32 next_off = map->off_arr->field_off[i]; + for (i = 0; i < foffs->cnt; i++) { + u32 next_off = foffs->field_off[i]; + u32 sz = next_off - curr_off; - memset(dst + curr_off, 0, next_off - curr_off); - curr_off = next_off + map->off_arr->field_sz[i]; + memset(dst + curr_off, 0, sz); - curr_off += foffs->field_sz[i]; ++ curr_off = next_off + foffs->field_sz[i]; } - memset(dst + curr_off, 0, map->value_size - curr_off); + memset(dst + curr_off, 0, size - curr_off); +} + +static inline void zero_map_value(struct bpf_map *map, void *dst) +{ + bpf_obj_memzero(map->field_offs, dst, map->value_size); } void copy_map_value_locked(struct bpf_map *map, void *dst, void *src,