Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp1475819pxb; Wed, 4 Nov 2020 09:54:15 -0800 (PST) X-Google-Smtp-Source: ABdhPJwxTj41d9G+l6OGw5iHevg+AJ58gMRJ6Rvd0C3Mc2xo9X/apX9l+SWMaxHcAhpw+G5efb6Q X-Received: by 2002:a17:906:7797:: with SMTP id s23mr25154113ejm.312.1604512454887; Wed, 04 Nov 2020 09:54:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604512454; cv=none; d=google.com; s=arc-20160816; b=hhH12my6dFiAXswvE6TfmmWTsEPTxvkXhx3tZUS0qx8b78ojyAunDxYDNhO99jJAnb iVKfmAIvyN9OB0jC4DgcbvpbLwgR56vzbMPCTIaW4tekm4UwHb5lyTLdBRYMuMUgeeaf 83BmpXC7cbrikRjY4dsbjN7sWhwIklXqQEB43S7x0+/EHLG5AQfiyMXXq4ljSWXwTxVt PjoAAlzEZlZydJRlMRUtmMRh5YOUObo0LyZF7hkqMgqQ6ShD7GgRXKiMQQSgGobPRMID 859a3hdIB9mvtD5xqOgwwSJzkfLDGA3Ln/WjRPkhAD9gB8UL+Sy0wn9DVsLHatDDXMGg RRYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=rGwZ4U2Yk94HbjWECDt3ZSEO8BgGsm3yANWJZznJVlE=; b=IFXBh3Q4Rz5SXjmDALEXI7u7VNkTFr722ZFQKTeIX1FI5n69/Wjhh1B3nl9g0QSchx owawXn4+aBuBj7plaKyiFTLqrgJAjMKgQKodlTkpqTj4v9GUBXaJQtyNbM9Cxq9v7tfz wJwPPDTk7MPa4uxgPuxIhrAb5LHL+1tSUH7dMAsfsfLWsxl1XgGTf027Q1Mzk1kMSjEG pCL2HeFU7HlkNWIeACEckyCFyIq5Fy9BU1naMe6WbjB329OeTwr1R1jketI8an6d07o2 85DEnJy+H498A76+UP9M7CXReaJ0MLv8j8idFzepzW3B9KEg4yZJKxBOb1tlWXfF6boa vGQw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=SKypcSJq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id lf14si1839128ejb.359.2020.11.04.09.53.51; Wed, 04 Nov 2020 09:54:14 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=SKypcSJq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730774AbgKDQo7 (ORCPT + 99 others); Wed, 4 Nov 2020 11:44:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38932 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729679AbgKDQo6 (ORCPT ); Wed, 4 Nov 2020 11:44:58 -0500 Received: from mail-ed1-x542.google.com (mail-ed1-x542.google.com [IPv6:2a00:1450:4864:20::542]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A0ED0C0613D4 for ; Wed, 4 Nov 2020 08:44:58 -0800 (PST) Received: by mail-ed1-x542.google.com with SMTP id a10so5922565edt.12 for ; Wed, 04 Nov 2020 08:44:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=rGwZ4U2Yk94HbjWECDt3ZSEO8BgGsm3yANWJZznJVlE=; b=SKypcSJq5Q6k60k9+zKvKMbvC4/mYkkGRNBl7hNNZGDnVCCmxbSynCz14nMmMe6+oA nHAsVIiIuk1jY34qSoxGvxeje1+NUCFO0WDNK95TU7m04UYEx0Wb4srpx5ztwBP5pgIq B9IM4QVUDbWlDbmPJMm458KQBunavjl5+UWfo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=rGwZ4U2Yk94HbjWECDt3ZSEO8BgGsm3yANWJZznJVlE=; b=D+4WzbzeqT3ug0dd4UR36N0CUvrZT4w/ggtXHEjyJWBdJ639ZIrXaBEnGplZZZIIv6 pA6wLxOS1zJT2aPw1R4jYu57csYrbuZ7dFcG+cmlhbT0Klvzl70BWqsmG14jX6cN/tKa ybkQkKTl3QNp58vxgeP3Rcna6QCk31LhgiA9rmBYKfZP1Df2AQb5xY5nIKQlAGSFt6Zt ilq2MnNZ8AiQEWY0QDGm0j15/Ap/+q0w1H4bUNcCCMGkzw3bF+i+WkKe14HCWy7J9w/l 3qwEq0dKOKJGqIpCUbj7ww/WWEnPSEwSkgrWy63RgXjw74RlshHXPGLvUwi74fShSfIn e86A== X-Gm-Message-State: AOAM5311DgCOm3babk1QjUL/Teb4k8f/Ze/eJegibf2KO1rfKKR8ZrKX Jkl3Dcy1CBZks3B2WQDbidVaA3dth/rMsFjV X-Received: by 2002:a50:fe98:: with SMTP id d24mr27534696edt.223.1604508297130; Wed, 04 Nov 2020 08:44:57 -0800 (PST) Received: from kpsingh.zrh.corp.google.com ([81.6.44.51]) by smtp.gmail.com with ESMTPSA id g20sm1283551ejz.88.2020.11.04.08.44.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Nov 2020 08:44:56 -0800 (PST) From: KP Singh To: linux-kernel@vger.kernel.org, bpf@vger.kernel.org Cc: Alexei Starovoitov , Daniel Borkmann , Martin KaFai Lau , Song Liu , Paul Turner , Jann Horn , Hao Luo Subject: [PATCH bpf-next v3 0/9] Implement task_local_storage Date: Wed, 4 Nov 2020 17:44:44 +0100 Message-Id: <20201104164453.74390-1-kpsingh@chromium.org> X-Mailer: git-send-email 2.29.1.341.ge80a0c044ae-goog MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: KP Singh # v2 -> v3 - Added bpf_spin_locks to the selftests for local storage, found that these are not available for LSM programs. - Made spin lock helpers available for LSM programs (except sleepable programs which need more work). - Minor fixes for includes and added short commit messages for patches that were split up for libbpf and bpftool. - Added Song's acks. # v1 -> v2 - Updated the refcounting for task_struct and simplified conversion of fd -> struct pid. - Some fixes suggested by Martin and Andrii, notably: * long return type for the bpf_task_storage_delete helper (update for bpf_inode_storage_delete will be sent separately). * Remove extra nullness check to task_storage_ptr in map syscall ops. * Changed the argument signature of the BPF helpers to use task_struct pointer in uapi headers. * Remove unnecessary verifier logic for the bpf_get_current_task_btf helper. * Split the changes for bpftool and libbpf. - Exercised syscall operations for local storage (kept a simpler verison in test_local_storage.c, the eventual goal will be to update sk_storage_map.c for all local storage types). - Formatting fixes + Rebase. We already have socket and inode local storage since [1] This patch series: * Implements bpf_local_storage for task_struct. * Implements the bpf_get_current_task_btf helper which returns a BTF pointer to the current task. Not only is this generally cleaner (reading from the task_struct currently requires BPF_CORE_READ), it also allows the BTF pointer to be used in task_local_storage helpers. * In order to implement this helper, a RET_PTR_TO_BTF_ID is introduced which works similar to RET_PTR_TO_BTF_ID_OR_NULL but does not require a nullness check. * Implements a detection in selftests which uses the task local storage to deny a running executable from unlinking itself. [1]: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit/?id=f836a56e84ffc9f1a1cd73f77e10404ca46a4616 KP Singh (9): bpf: Implement task local storage libbpf: Add support for task local storage bpftool: Add support for task local storage bpf: Implement get_current_task_btf and RET_PTR_TO_BTF_ID bpf: Allow LSM programs to use bpf spin locks bpf: Fix tests for local_storage bpf: Update selftests for local_storage to use vmlinux.h bpf: Add tests for task_local_storage bpf: Exercise syscall operations for inode and sk storage include/linux/bpf.h | 1 + include/linux/bpf_lsm.h | 23 ++ include/linux/bpf_types.h | 1 + include/uapi/linux/bpf.h | 48 +++ kernel/bpf/Makefile | 1 + kernel/bpf/bpf_lsm.c | 8 + kernel/bpf/bpf_task_storage.c | 313 ++++++++++++++++++ kernel/bpf/syscall.c | 3 +- kernel/bpf/verifier.c | 34 +- kernel/trace/bpf_trace.c | 16 + security/bpf/hooks.c | 2 + .../bpf/bpftool/Documentation/bpftool-map.rst | 3 +- tools/bpf/bpftool/bash-completion/bpftool | 2 +- tools/bpf/bpftool/map.c | 4 +- tools/include/uapi/linux/bpf.h | 48 +++ tools/lib/bpf/libbpf_probes.c | 1 + .../bpf/prog_tests/test_local_storage.c | 182 +++++++++- .../selftests/bpf/progs/local_storage.c | 103 ++++-- 18 files changed, 741 insertions(+), 52 deletions(-) create mode 100644 kernel/bpf/bpf_task_storage.c -- 2.29.1.341.ge80a0c044ae-goog