From owner-freebsd-hackers@freebsd.org Tue Mar 30 05:06:51 2021 Return-Path: Delivered-To: freebsd-hackers@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 97CE45BA6EC for ; Tue, 30 Mar 2021 05:06:51 +0000 (UTC) (envelope-from asomers@gmail.com) Received: from mailman.nyi.freebsd.org (mailman.nyi.freebsd.org [IPv6:2610:1c1:1:606c::50:13]) by mx1.freebsd.org (Postfix) with ESMTP id 4F8cqv2xyGz3lps for ; Tue, 30 Mar 2021 05:06:51 +0000 (UTC) (envelope-from asomers@gmail.com) Received: by mailman.nyi.freebsd.org (Postfix) id 637BF5BA6EB; Tue, 30 Mar 2021 05:06:51 +0000 (UTC) Delivered-To: hackers@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 634005BA6EA for ; Tue, 30 Mar 2021 05:06:51 +0000 (UTC) (envelope-from asomers@gmail.com) Received: from mail-oi1-f174.google.com (mail-oi1-f174.google.com [209.85.167.174]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4F8cqt2yCCz3lmy for ; Tue, 30 Mar 2021 05:06:50 +0000 (UTC) (envelope-from asomers@gmail.com) Received: by mail-oi1-f174.google.com with SMTP id c16so15327325oib.3 for ; Mon, 29 Mar 2021 22:06:50 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=l1iBiQUScXEFDF0S8Hdcc0JmhUFXPSD7OAhERUgOit8=; b=XfAz1B69YJRFH+5v3DWivxNmZRMGe8t9Wb/BTI1puriYtV4kVcyjGG80nIAPEtYxpH AS4RibZvZ1COvNAngkMfTsbVGiG06VYwBKZi67n5/1roA7CL8Qoy7dc1/u5RfXIxWJ9U CP9cxxIKtONZnT7rBHUJ9OYMmyQACpwStNvs9vCfyOdAmjYEwaJQ1ktwT9uMPTjhvJ1d 344MwGAlguGl/iemE2vVVAR+PMbCtvXt1sQGo0MSRF/1TUZjFQJY3wGTGzUAT5nGb8Gj iFrm+TugsOEDpcX5clL9pRdESIUi0sjGcqBXnVvi7pSPg27WsEZ5ClZDK8s/wpELuyf6 4R5w== X-Gm-Message-State: AOAM533PBrwki8nbPYQfxpyDoIa++D5y/zEIn3DywJ2aWh22K2bekumu E296EOYGGsKdexx3RO/PKiZcXqMAkA0907MOFMoH+1hbO8Q= X-Google-Smtp-Source: ABdhPJyOeaBS33b8RDkNLsQ7bt5hYX516alfRSWp+imXCZmzZUJ2OgalE12QtEhZCfXYLHM7/B93r3oJnogpQHVeAec= X-Received: by 2002:a05:6808:14c8:: with SMTP id f8mr1962547oiw.55.1617080807504; Mon, 29 Mar 2021 22:06:47 -0700 (PDT) MIME-Version: 1.0 From: Alan Somers Date: Mon, 29 Mar 2021 23:06:36 -0600 Message-ID: Subject: How does the stack's guard page work on amd64? To: "freebsd-hackers@freebsd.org" X-Rspamd-Queue-Id: 4F8cqt2yCCz3lmy X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=pass (mx1.freebsd.org: domain of asomers@gmail.com designates 209.85.167.174 as permitted sender) smtp.mailfrom=asomers@gmail.com X-Spamd-Result: default: False [-2.00 / 15.00]; R_SPF_ALLOW(-0.20)[+ip4:209.85.128.0/17]; TO_DN_ALL(0.00)[]; NEURAL_HAM_SHORT(-1.00)[-1.000]; FORGED_SENDER(0.30)[asomers@freebsd.org,asomers@gmail.com]; MIME_TRACE(0.00)[0:+,1:+,2:~]; SUBJECT_ENDS_QUESTION(1.00)[]; FREEMAIL_ENVFROM(0.00)[gmail.com]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US]; RBL_DBL_DONT_QUERY_IPS(0.00)[209.85.167.174:from]; TO_DOM_EQ_FROM_DOM(0.00)[]; R_DKIM_NA(0.00)[]; ARC_NA(0.00)[]; FREEFALL_USER(0.00)[asomers]; FROM_HAS_DN(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FROM_NEQ_ENVFROM(0.00)[asomers@freebsd.org,asomers@gmail.com]; MIME_GOOD(-0.10)[multipart/alternative,text/plain]; PREVIOUSLY_DELIVERED(0.00)[hackers@freebsd.org]; DMARC_NA(0.00)[freebsd.org]; RCPT_COUNT_ONE(0.00)[1]; SPAMHAUS_ZRD(0.00)[209.85.167.174:from:127.0.2.255]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; RCVD_IN_DNSWL_NONE(0.00)[209.85.167.174:from]; RWL_MAILSPIKE_POSSIBLE(0.00)[209.85.167.174:from]; RCVD_COUNT_TWO(0.00)[2]; RCVD_TLS_ALL(0.00)[]; MAILMAN_DEST(0.00)[hackers] Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.34 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Technical discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Mar 2021 05:06:51 -0000 Rust tries to detect stack overflow and handles it differently than other segfaults, but it's currently broken on FreeBSD/amd64. I've got a patch that fixes the problem, but I would like someone to confirm my reasoning. It seems like FreeBSD's main thread stacks include a guard page at the bottom. However, when Rust tries to create its own guard page (by re-mmap()ping and mprotect()ing it), it seems like FreeBSD's guard page automatically moves up into the un-remapped region. At least, that's how it behaves, based on the addresses that segfault. Is that correct? For other threads, Rust doesn't try to remap the guard page, it just relies on the guard page created by libthr in _thr_stack_alloc. Finally, what changed in between FreeBSD 10.3 and 11.4? Rust's stack overflow detection worked in 10.3. -Alan