From patchwork Tue Jan 15 22:54:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanislav Fomichev X-Patchwork-Id: 1025531 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="ljsf1LEF"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43fQdm694Jz9sD4 for ; Wed, 16 Jan 2019 09:54:52 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391275AbfAOWyv (ORCPT ); Tue, 15 Jan 2019 17:54:51 -0500 Received: from mail-pl1-f202.google.com ([209.85.214.202]:44860 "EHLO mail-pl1-f202.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2391270AbfAOWyv (ORCPT ); Tue, 15 Jan 2019 17:54:51 -0500 Received: by mail-pl1-f202.google.com with SMTP id b24so2565009pls.11 for ; Tue, 15 Jan 2019 14:54:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:to:cc; bh=oX2Dz5nCGnb4hLjks6A5z8jw4XlFI4j5IYWgY4o7fhk=; b=ljsf1LEFw/cQHmSFQA6QiHLxCQ5H5RtyVKE4OsBh73Lm0RojO0ChsosSzs7sXHeyXQ Bq/mA7FvAKFElb3hRBR7ddY0vGlRjj5mZ1c5/2XheAuSI9T+Tg8ViVeZnnYs1yaJQgAA TaQkoj0eP+mCdm0iV+9BQ5GRCxwaOjZjRrPAI3JL029dtho+xdjIy+JWEwTd+hl1rOd7 w/0Dh9ujTyhu6MYxz9UYbZrKp5PVdr+2lVCOR9GvPlFJxzAi2SQa4/3G5YAJcRjYqJ9D 0UjbtLXsR8QyBVjedOb4nvJ3l5I2mAZmsi7srHhO9ubcF+cyLTiUEfZBtdU7D5/Nd9ld GVww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=oX2Dz5nCGnb4hLjks6A5z8jw4XlFI4j5IYWgY4o7fhk=; b=Nun98qntzbit+MPJUeaIrD2Tm/4CGW2qRvd9Mkp0ntvrGMMPlb/161q0GCfaWMRkr/ xO3W3qknJTnY96plN417mZbpujwkeXUd3tlYKlxRFesZv8JB61Y2TjnjzoK5Mt8MSJfx Z3Im/4iZgDKFLPMvsOq57z82cWWrYhM+AAJNEiIiIfuAaqza4+s0NUxijw0QhdHtJP44 BEjEjO8mktlPASBFt77mgseAafP2FkfDuuZgznCdprttxchQHvSm/ACZo46o/kRjMEDP QAA1znGdzpFrO1sTq7I2ZXOVx/s/xBk9wwEGxY8FZT11mE8zZ8K81RldWsKZhGKYQ8XU Wc7g== X-Gm-Message-State: AJcUukcJah3oqCpzsCbQr7vEkK3rOaYaLBn3AnlzPuigUm2+RjC0AFbN w3Hsv9oAjM/zIjraddnHj9j/lx+NTWs6MGlaMWnlw2u8GJSlw89IxsFz6eqy5VrYPH+thMN+Haw FvKy66jzD7X62VaOUCPJURMAjlOaNa5s1V0u6O9OTN+wm2EoQuZzvrg== X-Google-Smtp-Source: ALg8bN6+t5ZUv8QoZoF6x0reWPPRWAFgj+PxxDVO5Pt//V3qCZLmfqGW/HKOAvqZuwQ/As+IXf4pcLs= X-Received: by 2002:a17:902:248:: with SMTP id 66mr1939961plc.60.1547592890138; Tue, 15 Jan 2019 14:54:50 -0800 (PST) Date: Tue, 15 Jan 2019 14:54:45 -0800 Message-Id: <20190115225447.245788-1-sdf@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.20.1.97.g81188d93c3-goog Subject: [PATCH bpf 1/3] bpf: don't assume build-id length is always 20 bytes From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, ast@kernel.org, daniel@iogearbox.net, songliubraving@fb.com, Stanislav Fomichev Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Build-id length is not fixed to 20, it can be (`man ld` /--build-id): * 128-bit (uuid) * 160-bit (sha1) * any length specified in ld --build-id=0xhexstring To fix the issue of missing BPF_STACK_BUILD_ID_VALID for shorter build-ids, assume that build-id is somewhere in the range of 1 .. 20. Set the remaining bytes to zero. Fixes: 615755a77b24 ("bpf: extend stackmap to save binary_build_id+offset instead of address") Signed-off-by: Stanislav Fomichev Acked-by: Song Liu --- kernel/bpf/stackmap.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/kernel/bpf/stackmap.c b/kernel/bpf/stackmap.c index d9e2483669d0..8975d1768dcb 100644 --- a/kernel/bpf/stackmap.c +++ b/kernel/bpf/stackmap.c @@ -180,11 +180,15 @@ static inline int stack_map_parse_build_id(void *page_addr, if (nhdr->n_type == BPF_BUILD_ID && nhdr->n_namesz == sizeof("GNU") && - nhdr->n_descsz == BPF_BUILD_ID_SIZE) { + nhdr->n_descsz > 0 && + nhdr->n_descsz <= BPF_BUILD_ID_SIZE) { + __u32 len = min_t(__u32, + BPF_BUILD_ID_SIZE, nhdr->n_descsz); memcpy(build_id, note_start + note_offs + ALIGN(sizeof("GNU"), 4) + sizeof(Elf32_Nhdr), - BPF_BUILD_ID_SIZE); + len); + memset(build_id + len, 0, BPF_BUILD_ID_SIZE - len); return 0; } new_offs = note_offs + sizeof(Elf32_Nhdr) +