From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 7694 invoked from network); 9 Oct 2020 20:08:03 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 9 Oct 2020 20:08:03 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20200801; t=1602274083; b=uYuyjbu+fFsGCS8Ik36m+fw8hFas2Vwv1osbqWjiYVFE+4mczFK1sArZb9VoXuuVgKhSMuGXu1 nBbKP0i0yqj5h4XJEE+viYGOH7LPlj/mT1fVTGikBh9nH4Dyk85YfEKWbzpJygqBOvIQWlP57r kNPWwEjTGGzIGqxOrA+jewXrN4frHyH1Y5/DZkj9pglXST4VcGdHC51gH3tT9Rvt+dqArMQaJD RVxg6/utvP+n5rq4u3a/AtU3jwRNoKANjLZ5XU1uR9Ca6PP0ZNFniIcBG1su44+KaurCelfEjk fdimOR1UVQyDAfFchoNHKU4+VAP/gQSi7d/ZtyVvL7Uzyw==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-oo1-f50.google.com) smtp.remote-ip=209.85.161.50; dkim=pass header.d=gmail.com header.s=20161025 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20200801; t=1602274083; bh=DFXv/ZJ/Rue0ccqhXVNwlfqjenR42CpQT+3WYJ0QGOg=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Type:MIME-Version:Message-ID:Subject:To:From:Date: DKIM-Signature:DKIM-Signature; b=zK+qM4x3YenLtjtb2kcqc9ZFDaLrRVkWCrQNbFuwhUBxC1ucFkUVkRIp9SmfSCxcP4FljJCFsi crJhF1mpV6Alfjjf8hMs8NaK1A2JHBkV7lgPtTeCThhTCDBTV9S6J2NnT1DpO7Tz6nbR3DSSub kuqgmoQFeMpZ49qMI0OTOtY+3S/xTZAAXOB917TqV9f+BWBuzvsntEYLN2xNuZP9pQYWZlXHoO FCdS3qd+H2PoxencPL80BCOkjBNHsGU52rSwpFPMz1WjH9GIfPxjNlvm1GeAQ+Gjm8imrfvX85 ecvxhGBUECOiD1g6g9TsdH89TuNTsvTfOEZgD6U+x17uvg==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20200801; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Content-Type:MIME-Version:Message-ID: Subject:To:From:Date:Reply-To:Cc:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References; bh=BcXVXzHp6ajQ0YVLRYBMn9DFFDQeKc2+WqBdZGZptkA=; b=AOPRVMHWNb19hvjW6hX5dp/ds2 Cz80Ua1fK+uKM8t10ERMqQcSkvMP5+N8fw4QtaP5Ls50knFq9z+92Ct8atoXkTFrpweokP4OgiMoo NXI5VI40HcIsMX3cazINl+ecNxfq6b7s2FUBG4LJpmECJTdQtJkaD13VYIyyskoiGQpsAj22eq1Bf UCiuTfosmnQ767QVdUXsEszAWh6/Q0TWJEZCyqOKIFcj5RjNzusgwaEk6EXmakTxJu/UlRdYnJH2X ud0H8qd+ohaASMJF0xkbqlMeoayGIOpK0UAhapqFosWomp4uvxidVvtmfLrkTDCdck+N8J/T0Ys6g nV6xt/dw==; Received: from authenticated user by zero.zsh.org with local id 1kQygM-000Gn9-1c; Fri, 09 Oct 2020 20:08:02 +0000 Authentication-Results: zsh.org; iprev=pass (mail-oo1-f50.google.com) smtp.remote-ip=209.85.161.50; dkim=pass header.d=gmail.com header.s=20161025 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none Received: from mail-oo1-f50.google.com ([209.85.161.50]:45536) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1kQyg1-000Ge7-Np; Fri, 09 Oct 2020 20:07:42 +0000 Received: by mail-oo1-f50.google.com with SMTP id h8so2638822ooc.12 for ; Fri, 09 Oct 2020 13:07:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:subject:message-id:mail-followup-to:mime-version :content-disposition; bh=BcXVXzHp6ajQ0YVLRYBMn9DFFDQeKc2+WqBdZGZptkA=; b=IY6iA4xSZS5qu8eGq/2nKlnaCMRMFKwFbLYfq/pyGixRGkgtL12/hws+1X3gm3q96O nww+V70daZblqTnT14bEGCsAwaFSjBwF47eOo3+Gp5sDq8zua1hvo8ieYwz7xvQU0cvI 0oMAoijxAnxxldPQZpk51u9KlTwl/FO7FlTBmcJljvZUdLfM67Ynv8/iGRhdJckPeol8 7G9EqF+8Ka7YYOgkdn62x9/WQhVJT6Qw3WDaBMwGNVuZdgbSYsEMFZ4tMF4mU3uzdhtg bQxJTtBQzssnij3ZFuzxd8kccQhJlRMXz10svAYwo8qZu/klK5UwYuJwi/+U+TIlkkIT 0OJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:subject:message-id:mail-followup-to :mime-version:content-disposition; bh=BcXVXzHp6ajQ0YVLRYBMn9DFFDQeKc2+WqBdZGZptkA=; b=nrijQRD2gLNqcssp+4k5OzL5lwBVvVgrciUjxHwFnUqzIMvP5jLwbxwdJkELAUHm1Y 47Abm9hDsfkzO2h6+RoxrujnsGah1Ued2guPbNs+Wq4Ly+/gJU8UZWEAr2OQDwMCme9B po1JhUzRC/7tE8nDaHpIKJGtpI0IERczN+6E0vLAKPjdskffGPxByGxQ9b8jRBMjTJec 9F5AVTFMxh7sqEJfjc7LSVjp6I/sTP7h8j/bhch0wDthXvsP+TH/Ao5ZnIFBpkncUKKq n0wquryOBTxZyGTm+CK9jPIOwwPQXm/fHo8s9IAvzXVIkWdkHi0/Gyyr7anXgMK6HeWM gYtg== X-Gm-Message-State: AOAM531+IUs8dufHeDFYBpwT/oKX3/3YyO3lEUVJWjTwJs7R2gad/J5X t0pUotwvwSDbR9WTn7eEn9GdDedEEXw= X-Google-Smtp-Source: ABdhPJyqaFit4zQt5YDDU+G3+yC6C5dIFxbIWShQcp/0v8IfeBDs0/se6Nu2UrL8A1xEA+cVhESVcw== X-Received: by 2002:a4a:d8c1:: with SMTP id c1mr7626264oov.31.1602274059864; Fri, 09 Oct 2020 13:07:39 -0700 (PDT) Received: from CptOrmolo.darkstar (cpe-70-113-147-195.tx.res.rr.com. [70.113.147.195]) by smtp.gmail.com with ESMTPSA id n10sm8352773ooo.23.2020.10.09.13.07.38 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Oct 2020 13:07:39 -0700 (PDT) Date: Fri, 9 Oct 2020 15:07:37 -0500 From: Matthew Martin To: zsh-workers@zsh.org Subject: [patch] Avoid race in zf_mkdir Message-ID: <20201009200737.GA78914@CptOrmolo.darkstar> Mail-Followup-To: zsh-workers@zsh.org MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Seq: 47436 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: Archived-At: A user reported in #zsh they were seeing sporadic zf_mkdir errors when concurrently creating the same directory. Move the stat ISDIR check to after the mkdir call to avoid the race. diff --git a/Src/Modules/files.c b/Src/Modules/files.c index 6d20e38a8..ae301c14f 100644 --- a/Src/Modules/files.c +++ b/Src/Modules/files.c @@ -124,17 +124,17 @@ domkdir(char *nam, char *path, mode_t mode, int p) mode_t oumask; char const *rpath = unmeta(path); + oumask = umask(0); + err = mkdir(rpath, mode) ? errno : 0; + umask(oumask); + if(!err) + return 0; if(p) { struct stat st; if(!stat(rpath, &st) && S_ISDIR(st.st_mode)) return 0; } - oumask = umask(0); - err = mkdir(rpath, mode) ? errno : 0; - umask(oumask); - if(!err) - return 0; zwarnnam(nam, "cannot make directory `%s': %e", path, err); return 1; }