From: kernel test robot <lkp@intel.com>
To: David Vernet <void@manifault.com>, bpf@vger.kernel.org
Cc: oe-kbuild-all@lists.linux.dev, ast@kernel.org,
daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev,
song@kernel.org, yhs@meta.com, john.fastabend@gmail.com,
kpsingh@kernel.org, sdf@google.com, haoluo@google.com,
jolsa@kernel.org, linux-kernel@vger.kernel.org,
kernel-team@meta.com, memxor@gmail.com
Subject: Re: [PATCH bpf-next v2 3/3] bpf: Use BPF_KFUNC macro at all kfunc definitions
Date: Tue, 24 Jan 2023 03:12:10 +0800 [thread overview]
Message-ID: <202301240259.xwHsyJl4-lkp@intel.com> (raw)
In-Reply-To: <20230123171506.71995-4-void@manifault.com>
Hi David,
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/David-Vernet/bpf-Add-BPF_KFUNC-macro-for-defining-kfuncs/20230124-011804
base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
patch link: https://lore.kernel.org/r/20230123171506.71995-4-void%40manifault.com
patch subject: [PATCH bpf-next v2 3/3] bpf: Use BPF_KFUNC macro at all kfunc definitions
config: powerpc-allyesconfig (https://download.01.org/0day-ci/archive/20230124/202301240259.xwHsyJl4-lkp@intel.com/config)
compiler: powerpc-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/760b15a8e5d45d6e9925d2439e0d052de969b361
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review David-Vernet/bpf-Add-BPF_KFUNC-macro-for-defining-kfuncs/20230124-011804
git checkout 760b15a8e5d45d6e9925d2439e0d052de969b361
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=powerpc olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=powerpc SHELL=/bin/bash kernel/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
>> kernel/trace/bpf_trace.c:1233: warning: expecting prototype for bpf_lookup_user_key(). Prototype was for BPF_KFUNC() instead
>> kernel/trace/bpf_trace.c:1282: warning: expecting prototype for bpf_lookup_system_key(). Prototype was for BPF_KFUNC() instead
>> kernel/trace/bpf_trace.c:1306: warning: expecting prototype for bpf_key_put(). Prototype was for BPF_KFUNC() instead
>> kernel/trace/bpf_trace.c:1328: warning: expecting prototype for bpf_verify_pkcs7_signature(). Prototype was for BPF_KFUNC() instead
vim +1233 kernel/trace/bpf_trace.c
f92c1e183604c2 Jiri Olsa 2021-12-08 1205
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1206 #ifdef CONFIG_KEYS
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1207 /**
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1208 * bpf_lookup_user_key - lookup a key by its serial
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1209 * @serial: key handle serial number
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1210 * @flags: lookup-specific flags
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1211 *
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1212 * Search a key with a given *serial* and the provided *flags*.
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1213 * If found, increment the reference count of the key by one, and
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1214 * return it in the bpf_key structure.
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1215 *
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1216 * The bpf_key structure must be passed to bpf_key_put() when done
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1217 * with it, so that the key reference count is decremented and the
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1218 * bpf_key structure is freed.
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1219 *
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1220 * Permission checks are deferred to the time the key is used by
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1221 * one of the available key-specific kfuncs.
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1222 *
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1223 * Set *flags* with KEY_LOOKUP_CREATE, to attempt creating a requested
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1224 * special keyring (e.g. session keyring), if it doesn't yet exist.
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1225 * Set *flags* with KEY_LOOKUP_PARTIAL, to lookup a key without waiting
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1226 * for the key construction, and to retrieve uninstantiated keys (keys
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1227 * without data attached to them).
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1228 *
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1229 * Return: a bpf_key pointer with a valid key pointer if the key is found, a
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1230 * NULL pointer otherwise.
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1231 */
760b15a8e5d45d David Vernet 2023-01-23 1232 BPF_KFUNC(struct bpf_key *bpf_lookup_user_key(u32 serial, u64 flags))
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 @1233 {
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1234 key_ref_t key_ref;
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1235 struct bpf_key *bkey;
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1236
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1237 if (flags & ~KEY_LOOKUP_ALL)
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1238 return NULL;
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1239
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1240 /*
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1241 * Permission check is deferred until the key is used, as the
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1242 * intent of the caller is unknown here.
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1243 */
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1244 key_ref = lookup_user_key(serial, flags, KEY_DEFER_PERM_CHECK);
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1245 if (IS_ERR(key_ref))
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1246 return NULL;
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1247
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1248 bkey = kmalloc(sizeof(*bkey), GFP_KERNEL);
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1249 if (!bkey) {
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1250 key_put(key_ref_to_ptr(key_ref));
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1251 return NULL;
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1252 }
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1253
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1254 bkey->key = key_ref_to_ptr(key_ref);
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1255 bkey->has_ref = true;
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1256
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1257 return bkey;
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1258 }
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1259
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1260 /**
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1261 * bpf_lookup_system_key - lookup a key by a system-defined ID
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1262 * @id: key ID
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1263 *
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1264 * Obtain a bpf_key structure with a key pointer set to the passed key ID.
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1265 * The key pointer is marked as invalid, to prevent bpf_key_put() from
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1266 * attempting to decrement the key reference count on that pointer. The key
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1267 * pointer set in such way is currently understood only by
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1268 * verify_pkcs7_signature().
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1269 *
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1270 * Set *id* to one of the values defined in include/linux/verification.h:
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1271 * 0 for the primary keyring (immutable keyring of system keys);
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1272 * VERIFY_USE_SECONDARY_KEYRING for both the primary and secondary keyring
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1273 * (where keys can be added only if they are vouched for by existing keys
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1274 * in those keyrings); VERIFY_USE_PLATFORM_KEYRING for the platform
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1275 * keyring (primarily used by the integrity subsystem to verify a kexec'ed
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1276 * kerned image and, possibly, the initramfs signature).
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1277 *
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1278 * Return: a bpf_key pointer with an invalid key pointer set from the
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1279 * pre-determined ID on success, a NULL pointer otherwise
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1280 */
760b15a8e5d45d David Vernet 2023-01-23 1281 BPF_KFUNC(struct bpf_key *bpf_lookup_system_key(u64 id))
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 @1282 {
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1283 struct bpf_key *bkey;
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1284
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1285 if (system_keyring_id_check(id) < 0)
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1286 return NULL;
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1287
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1288 bkey = kmalloc(sizeof(*bkey), GFP_ATOMIC);
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1289 if (!bkey)
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1290 return NULL;
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1291
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1292 bkey->key = (struct key *)(unsigned long)id;
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1293 bkey->has_ref = false;
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1294
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1295 return bkey;
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1296 }
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1297
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1298 /**
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1299 * bpf_key_put - decrement key reference count if key is valid and free bpf_key
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1300 * @bkey: bpf_key structure
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1301 *
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1302 * Decrement the reference count of the key inside *bkey*, if the pointer
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1303 * is valid, and free *bkey*.
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1304 */
760b15a8e5d45d David Vernet 2023-01-23 1305 BPF_KFUNC(void bpf_key_put(struct bpf_key *bkey))
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 @1306 {
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1307 if (bkey->has_ref)
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1308 key_put(bkey->key);
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1309
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1310 kfree(bkey);
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1311 }
f3cf4134c5c6c4 Roberto Sassu 2022-09-20 1312
865b0566d8f1a0 Roberto Sassu 2022-09-20 1313 #ifdef CONFIG_SYSTEM_DATA_VERIFICATION
865b0566d8f1a0 Roberto Sassu 2022-09-20 1314 /**
865b0566d8f1a0 Roberto Sassu 2022-09-20 1315 * bpf_verify_pkcs7_signature - verify a PKCS#7 signature
865b0566d8f1a0 Roberto Sassu 2022-09-20 1316 * @data_ptr: data to verify
865b0566d8f1a0 Roberto Sassu 2022-09-20 1317 * @sig_ptr: signature of the data
865b0566d8f1a0 Roberto Sassu 2022-09-20 1318 * @trusted_keyring: keyring with keys trusted for signature verification
865b0566d8f1a0 Roberto Sassu 2022-09-20 1319 *
865b0566d8f1a0 Roberto Sassu 2022-09-20 1320 * Verify the PKCS#7 signature *sig_ptr* against the supplied *data_ptr*
865b0566d8f1a0 Roberto Sassu 2022-09-20 1321 * with keys in a keyring referenced by *trusted_keyring*.
865b0566d8f1a0 Roberto Sassu 2022-09-20 1322 *
865b0566d8f1a0 Roberto Sassu 2022-09-20 1323 * Return: 0 on success, a negative value on error.
865b0566d8f1a0 Roberto Sassu 2022-09-20 1324 */
760b15a8e5d45d David Vernet 2023-01-23 1325 BPF_KFUNC(int bpf_verify_pkcs7_signature(struct bpf_dynptr_kern *data_ptr,
865b0566d8f1a0 Roberto Sassu 2022-09-20 1326 struct bpf_dynptr_kern *sig_ptr,
760b15a8e5d45d David Vernet 2023-01-23 1327 struct bpf_key *trusted_keyring))
865b0566d8f1a0 Roberto Sassu 2022-09-20 @1328 {
865b0566d8f1a0 Roberto Sassu 2022-09-20 1329 int ret;
865b0566d8f1a0 Roberto Sassu 2022-09-20 1330
865b0566d8f1a0 Roberto Sassu 2022-09-20 1331 if (trusted_keyring->has_ref) {
865b0566d8f1a0 Roberto Sassu 2022-09-20 1332 /*
865b0566d8f1a0 Roberto Sassu 2022-09-20 1333 * Do the permission check deferred in bpf_lookup_user_key().
865b0566d8f1a0 Roberto Sassu 2022-09-20 1334 * See bpf_lookup_user_key() for more details.
865b0566d8f1a0 Roberto Sassu 2022-09-20 1335 *
865b0566d8f1a0 Roberto Sassu 2022-09-20 1336 * A call to key_task_permission() here would be redundant, as
865b0566d8f1a0 Roberto Sassu 2022-09-20 1337 * it is already done by keyring_search() called by
865b0566d8f1a0 Roberto Sassu 2022-09-20 1338 * find_asymmetric_key().
865b0566d8f1a0 Roberto Sassu 2022-09-20 1339 */
865b0566d8f1a0 Roberto Sassu 2022-09-20 1340 ret = key_validate(trusted_keyring->key);
865b0566d8f1a0 Roberto Sassu 2022-09-20 1341 if (ret < 0)
865b0566d8f1a0 Roberto Sassu 2022-09-20 1342 return ret;
865b0566d8f1a0 Roberto Sassu 2022-09-20 1343 }
865b0566d8f1a0 Roberto Sassu 2022-09-20 1344
865b0566d8f1a0 Roberto Sassu 2022-09-20 1345 return verify_pkcs7_signature(data_ptr->data,
865b0566d8f1a0 Roberto Sassu 2022-09-20 1346 bpf_dynptr_get_size(data_ptr),
865b0566d8f1a0 Roberto Sassu 2022-09-20 1347 sig_ptr->data,
865b0566d8f1a0 Roberto Sassu 2022-09-20 1348 bpf_dynptr_get_size(sig_ptr),
865b0566d8f1a0 Roberto Sassu 2022-09-20 1349 trusted_keyring->key,
865b0566d8f1a0 Roberto Sassu 2022-09-20 1350 VERIFYING_UNSPECIFIED_SIGNATURE, NULL,
865b0566d8f1a0 Roberto Sassu 2022-09-20 1351 NULL);
865b0566d8f1a0 Roberto Sassu 2022-09-20 1352 }
865b0566d8f1a0 Roberto Sassu 2022-09-20 1353 #endif /* CONFIG_SYSTEM_DATA_VERIFICATION */
865b0566d8f1a0 Roberto Sassu 2022-09-20 1354
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
next prev parent reply other threads:[~2023-01-23 19:12 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-23 17:15 [PATCH bpf-next v2 0/3] Add BPF_KFUNC macro for kfunc definitions David Vernet
2023-01-23 17:15 ` [PATCH bpf-next v2 1/3] bpf: Add BPF_KFUNC macro for defining kfuncs David Vernet
2023-01-23 17:15 ` [PATCH bpf-next v2 2/3] bpf: Document usage of the new BPF_KFUNC macro David Vernet
2023-01-23 17:15 ` [PATCH bpf-next v2 3/3] bpf: Use BPF_KFUNC macro at all kfunc definitions David Vernet
2023-01-23 18:33 ` Alexei Starovoitov
2023-01-23 18:48 ` David Vernet
2023-01-23 18:54 ` Alexei Starovoitov
2023-01-23 19:01 ` David Vernet
2023-01-23 19:04 ` Daniel Borkmann
2023-01-23 21:00 ` Jonathan Corbet
2023-01-24 0:54 ` David Vernet
2023-01-24 14:50 ` Jonathan Corbet
2023-01-24 16:20 ` David Vernet
2023-01-31 15:15 ` Alan Maguire
2023-01-31 15:44 ` David Vernet
2023-01-31 17:30 ` Alexei Starovoitov
2023-01-23 19:01 ` kernel test robot
2023-01-23 19:12 ` kernel test robot [this message]
2023-01-24 7:15 ` Christoph Hellwig
2023-01-24 14:15 ` David Vernet
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202301240259.xwHsyJl4-lkp@intel.com \
--to=lkp@intel.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=haoluo@google.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kernel-team@meta.com \
--cc=kpsingh@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=martin.lau@linux.dev \
--cc=memxor@gmail.com \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=sdf@google.com \
--cc=song@kernel.org \
--cc=void@manifault.com \
--cc=yhs@meta.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.