* Re: [PATCH v13 bpf-next 09/10] bpf: Add bpf_dynptr_slice and bpf_dynptr_slice_rdwr
[not found] <20230301154953.641654-10-joannelkoong@gmail.com>
@ 2023-03-02 3:29 ` kernel test robot
2023-03-02 3:53 ` Joanne Koong
0 siblings, 1 reply; 2+ messages in thread
From: kernel test robot @ 2023-03-02 3:29 UTC (permalink / raw)
To: Joanne Koong, bpf
Cc: oe-kbuild-all, martin.lau, andrii, ast, memxor, daniel, netdev,
toke, Joanne Koong
Hi Joanne,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on bpf-next/master]
url: https://github.com/intel-lab-lkp/linux/commits/Joanne-Koong/bpf-Support-sk_buff-and-xdp_buff-as-valid-kfunc-arg-types/20230301-235341
base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
patch link: https://lore.kernel.org/r/20230301154953.641654-10-joannelkoong%40gmail.com
patch subject: [PATCH v13 bpf-next 09/10] bpf: Add bpf_dynptr_slice and bpf_dynptr_slice_rdwr
config: microblaze-randconfig-s043-20230302 (https://download.01.org/0day-ci/archive/20230302/202303021152.sPWiwGYn-lkp@intel.com/config)
compiler: microblaze-linux-gcc (GCC) 12.1.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.4-39-gce1a6720-dirty
# https://github.com/intel-lab-lkp/linux/commit/ab021cad431168baaba04ed320003be30f4deb34
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Joanne-Koong/bpf-Support-sk_buff-and-xdp_buff-as-valid-kfunc-arg-types/20230301-235341
git checkout ab021cad431168baaba04ed320003be30f4deb34
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=microblaze olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=microblaze SHELL=/bin/bash kernel/bpf/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202303021152.sPWiwGYn-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
>> kernel/bpf/helpers.c:2231:24: sparse: sparse: Using plain integer as NULL pointer
kernel/bpf/helpers.c:2235:24: sparse: sparse: Using plain integer as NULL pointer
kernel/bpf/helpers.c:2256:24: sparse: sparse: Using plain integer as NULL pointer
kernel/bpf/helpers.c:2305:24: sparse: sparse: Using plain integer as NULL pointer
kernel/bpf/helpers.c:2342:18: sparse: sparse: context imbalance in 'bpf_rcu_read_lock' - wrong count at exit
kernel/bpf/helpers.c:2347:18: sparse: sparse: context imbalance in 'bpf_rcu_read_unlock' - unexpected unlock
vim +2231 kernel/bpf/helpers.c
2195
2196 /**
2197 * bpf_dynptr_slice - Obtain a read-only pointer to the dynptr data.
2198 *
2199 * For non-skb and non-xdp type dynptrs, there is no difference between
2200 * bpf_dynptr_slice and bpf_dynptr_data.
2201 *
2202 * If the intention is to write to the data slice, please use
2203 * bpf_dynptr_slice_rdwr.
2204 *
2205 * The user must check that the returned pointer is not null before using it.
2206 *
2207 * Please note that in the case of skb and xdp dynptrs, bpf_dynptr_slice
2208 * does not change the underlying packet data pointers, so a call to
2209 * bpf_dynptr_slice will not invalidate any ctx->data/data_end pointers in
2210 * the bpf program.
2211 *
2212 * @ptr: The dynptr whose data slice to retrieve
2213 * @offset: Offset into the dynptr
2214 * @buffer: User-provided buffer to copy contents into
2215 * @buffer__szk: Size (in bytes) of the buffer. This is the length of the
2216 * requested slice. This must be a constant.
2217 *
2218 * @returns: NULL if the call failed (eg invalid dynptr), pointer to a read-only
2219 * data slice (can be either direct pointer to the data or a pointer to the user
2220 * provided buffer, with its contents containing the data, if unable to obtain
2221 * direct pointer)
2222 */
2223 __bpf_kfunc void *bpf_dynptr_slice(const struct bpf_dynptr_kern *ptr, u32 offset,
2224 void *buffer, u32 buffer__szk)
2225 {
2226 enum bpf_dynptr_type type;
2227 u32 len = buffer__szk;
2228 int err;
2229
2230 if (!ptr->data)
> 2231 return 0;
2232
2233 err = bpf_dynptr_check_off_len(ptr, offset, len);
2234 if (err)
2235 return 0;
2236
2237 type = bpf_dynptr_get_type(ptr);
2238
2239 switch (type) {
2240 case BPF_DYNPTR_TYPE_LOCAL:
2241 case BPF_DYNPTR_TYPE_RINGBUF:
2242 return ptr->data + ptr->offset + offset;
2243 case BPF_DYNPTR_TYPE_SKB:
2244 return skb_header_pointer(ptr->data, ptr->offset + offset, len, buffer);
2245 case BPF_DYNPTR_TYPE_XDP:
2246 {
2247 void *xdp_ptr = bpf_xdp_pointer(ptr->data, ptr->offset + offset, len);
2248 if (xdp_ptr)
2249 return xdp_ptr;
2250
2251 bpf_xdp_copy_buf(ptr->data, ptr->offset + offset, buffer, len, false);
2252 return buffer;
2253 }
2254 default:
2255 WARN_ONCE(true, "unknown dynptr type %d\n", type);
2256 return 0;
2257 }
2258 }
2259
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH v13 bpf-next 09/10] bpf: Add bpf_dynptr_slice and bpf_dynptr_slice_rdwr
2023-03-02 3:29 ` [PATCH v13 bpf-next 09/10] bpf: Add bpf_dynptr_slice and bpf_dynptr_slice_rdwr kernel test robot
@ 2023-03-02 3:53 ` Joanne Koong
0 siblings, 0 replies; 2+ messages in thread
From: Joanne Koong @ 2023-03-02 3:53 UTC (permalink / raw)
To: kernel test robot
Cc: bpf, oe-kbuild-all, martin.lau, andrii, ast, memxor, daniel,
netdev, toke
On Wed, Mar 1, 2023 at 7:30 PM kernel test robot <lkp@intel.com> wrote:
>
> Hi Joanne,
>
> Thank you for the patch! Perhaps something to improve:
>
> [auto build test WARNING on bpf-next/master]
>
> url: https://github.com/intel-lab-lkp/linux/commits/Joanne-Koong/bpf-Support-sk_buff-and-xdp_buff-as-valid-kfunc-arg-types/20230301-235341
> base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
> patch link: https://lore.kernel.org/r/20230301154953.641654-10-joannelkoong%40gmail.com
> patch subject: [PATCH v13 bpf-next 09/10] bpf: Add bpf_dynptr_slice and bpf_dynptr_slice_rdwr
> config: microblaze-randconfig-s043-20230302 (https://download.01.org/0day-ci/archive/20230302/202303021152.sPWiwGYn-lkp@intel.com/config)
> compiler: microblaze-linux-gcc (GCC) 12.1.0
> reproduce:
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # apt-get install sparse
> # sparse version: v0.6.4-39-gce1a6720-dirty
> # https://github.com/intel-lab-lkp/linux/commit/ab021cad431168baaba04ed320003be30f4deb34
> git remote add linux-review https://github.com/intel-lab-lkp/linux
> git fetch --no-tags linux-review Joanne-Koong/bpf-Support-sk_buff-and-xdp_buff-as-valid-kfunc-arg-types/20230301-235341
> git checkout ab021cad431168baaba04ed320003be30f4deb34
> # save the config file
> mkdir build_dir && cp config build_dir/.config
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=microblaze olddefconfig
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=microblaze SHELL=/bin/bash kernel/bpf/
>
> If you fix the issue, kindly add following tag where applicable
> | Reported-by: kernel test robot <lkp@intel.com>
> | Link: https://lore.kernel.org/oe-kbuild-all/202303021152.sPWiwGYn-lkp@intel.com/
>
> sparse warnings: (new ones prefixed by >>)
> >> kernel/bpf/helpers.c:2231:24: sparse: sparse: Using plain integer as NULL pointer
> kernel/bpf/helpers.c:2235:24: sparse: sparse: Using plain integer as NULL pointer
> kernel/bpf/helpers.c:2256:24: sparse: sparse: Using plain integer as NULL pointer
> kernel/bpf/helpers.c:2305:24: sparse: sparse: Using plain integer as NULL pointer
Argh, sorry about that. I'll submit a follow-up for returning NULL
instead of 0.
> kernel/bpf/helpers.c:2342:18: sparse: sparse: context imbalance in 'bpf_rcu_read_lock' - wrong count at exit
> kernel/bpf/helpers.c:2347:18: sparse: sparse: context imbalance in 'bpf_rcu_read_unlock' - unexpected unlock
>
> vim +2231 kernel/bpf/helpers.c
>
> 2195
> 2196 /**
> 2197 * bpf_dynptr_slice - Obtain a read-only pointer to the dynptr data.
> 2198 *
> 2199 * For non-skb and non-xdp type dynptrs, there is no difference between
> 2200 * bpf_dynptr_slice and bpf_dynptr_data.
> 2201 *
> 2202 * If the intention is to write to the data slice, please use
> 2203 * bpf_dynptr_slice_rdwr.
> 2204 *
> 2205 * The user must check that the returned pointer is not null before using it.
> 2206 *
> 2207 * Please note that in the case of skb and xdp dynptrs, bpf_dynptr_slice
> 2208 * does not change the underlying packet data pointers, so a call to
> 2209 * bpf_dynptr_slice will not invalidate any ctx->data/data_end pointers in
> 2210 * the bpf program.
> 2211 *
> 2212 * @ptr: The dynptr whose data slice to retrieve
> 2213 * @offset: Offset into the dynptr
> 2214 * @buffer: User-provided buffer to copy contents into
> 2215 * @buffer__szk: Size (in bytes) of the buffer. This is the length of the
> 2216 * requested slice. This must be a constant.
> 2217 *
> 2218 * @returns: NULL if the call failed (eg invalid dynptr), pointer to a read-only
> 2219 * data slice (can be either direct pointer to the data or a pointer to the user
> 2220 * provided buffer, with its contents containing the data, if unable to obtain
> 2221 * direct pointer)
> 2222 */
> 2223 __bpf_kfunc void *bpf_dynptr_slice(const struct bpf_dynptr_kern *ptr, u32 offset,
> 2224 void *buffer, u32 buffer__szk)
> 2225 {
> 2226 enum bpf_dynptr_type type;
> 2227 u32 len = buffer__szk;
> 2228 int err;
> 2229
> 2230 if (!ptr->data)
> > 2231 return 0;
> 2232
> 2233 err = bpf_dynptr_check_off_len(ptr, offset, len);
> 2234 if (err)
> 2235 return 0;
> 2236
> 2237 type = bpf_dynptr_get_type(ptr);
> 2238
> 2239 switch (type) {
> 2240 case BPF_DYNPTR_TYPE_LOCAL:
> 2241 case BPF_DYNPTR_TYPE_RINGBUF:
> 2242 return ptr->data + ptr->offset + offset;
> 2243 case BPF_DYNPTR_TYPE_SKB:
> 2244 return skb_header_pointer(ptr->data, ptr->offset + offset, len, buffer);
> 2245 case BPF_DYNPTR_TYPE_XDP:
> 2246 {
> 2247 void *xdp_ptr = bpf_xdp_pointer(ptr->data, ptr->offset + offset, len);
> 2248 if (xdp_ptr)
> 2249 return xdp_ptr;
> 2250
> 2251 bpf_xdp_copy_buf(ptr->data, ptr->offset + offset, buffer, len, false);
> 2252 return buffer;
> 2253 }
> 2254 default:
> 2255 WARN_ONCE(true, "unknown dynptr type %d\n", type);
> 2256 return 0;
> 2257 }
> 2258 }
> 2259
>
> --
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2023-03-02 3:53 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20230301154953.641654-10-joannelkoong@gmail.com>
2023-03-02 3:29 ` [PATCH v13 bpf-next 09/10] bpf: Add bpf_dynptr_slice and bpf_dynptr_slice_rdwr kernel test robot
2023-03-02 3:53 ` Joanne Koong
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).