Deutsch   English   Français   Italiano  
<mailman.39.1729799086.4695.python-list@python.org>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!2.eu.feeder.erje.net!feeder.erje.net!fu-berlin.de!uni-berlin.de!not-for-mail
From: Left Right <olegsivokon@gmail.com>
Newsgroups: comp.lang.python
Subject: Re: shutil.rmtree() fails when used in Fedora (rpm) "mock" environment
Date: Thu, 24 Oct 2024 21:21:17 +0200
Lines: 25
Message-ID: <mailman.39.1729799086.4695.python-list@python.org>
References: <4a13731716200669342338ae409e73ca@posteo.de>
 <CAJQBtg=kCr0VMGXvkBcj4U6CwatC2_G2dstO5pS56_koAXJurA@mail.gmail.com>
 <0c080a7d-92de-4518-ac44-78d97fc9e3bb@mrabarnett.plus.com>
 <CAJQBtg=ButLwvoA2USBEV8-q=taRhuC+t6D1HkJMbG9VzTvxnQ@mail.gmail.com>
 <69934a74-6d04-40a0-a75f-b8024bd0af43@mrabarnett.plus.com>
 <CAJQBtgm6Re8tj5hKAZ7Zz6+NC-0iqcBH-MKo8gaOMm8A4prZfA@mail.gmail.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
X-Trace: news.uni-berlin.de 5FXP08x3kGONBYZQ+cqNHAP2FKJebZ9LBZTGeWKsgETQ==
Cancel-Lock: sha1:o0N+hyYGW/uRiFgUZV2aR+lOMEI= sha256:XEDbOEz/iUL3PIa6dm94sEzGFBxsK2/rHhWsUqhM48I=
Return-Path: <olegsivokon@gmail.com>
X-Original-To: python-list@python.org
Delivered-To: python-list@mail.python.org
Authentication-Results: mail.python.org; dkim=pass
 reason="2048-bit key; unprotected key"
 header.d=gmail.com header.i=@gmail.com header.b=ZD9fuCD/;
 dkim-adsp=pass; dkim-atps=neutral
X-Spam-Status: OK 0.000
X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'thread': 0.05;
 'subject:when': 0.07; 'alternatives': 0.09; 'cc:addr:python-list':
 0.09; 'comparison': 0.09; 'reference:': 0.09; 'resolved': 0.09;
 '651': 0.16; '677': 0.16; '679': 0.16; '689': 0.16; '760': 0.16;
 'appended': 0.16; 'assert': 0.16; 'comparison,': 0.16; 'failed.':
 0.16; 'lambda': 0.16; 'received:mail-oi1-x22a.google.com': 0.16;
 'subject:() ': 0.16; 'subject:Fedora': 0.16; 'subject:fails':
 0.16; 'subject:used': 0.16; "can't": 0.17; 'cc:addr:python.org':
 0.20; 'skip:_ 10': 0.22; 'lines': 0.23; 'cc:2**0': 0.25; 'object':
 0.26; 'else': 0.27; 'modify': 0.31; 'module': 0.31; 'message-
 id:@mail.gmail.com': 0.31; 'question': 0.32; 'modified': 0.32;
 'but': 0.32; 'header:In-Reply-To:1': 0.34; 'received:google.com':
 0.34; 'from:addr:gmail.com': 0.34; 'following': 0.35; 'those':
 0.36; 'put': 0.38; 'added': 0.39; 'something': 0.40; 'reference':
 0.60; 'between': 0.63; 'less': 0.64; 'that,': 0.68; 'skip:* 10':
 0.73
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1729797688; x=1730402488; darn=python.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=meG3MRegPBjtgL4uZyZ5RTrHRdaG/cwO5dy/3PhLjIQ=;
 b=ZD9fuCD/szgbXK7Xwes9zquaCycbbX2GXzRnxZi8ErcHzlb7Rm8TBzcnkDsaH3nkq8
 Nb05NpdJshlaX4Wine1IOQ465C54kO+yYKZ3zpwUs7SaZSuupsplufvQ/CiMq39bHrzm
 NFyTAGg8xHBdBnujUSYYwuzUz6HAl3AoM9Ez77dpryVlgOFKvW9rxgTqqCf+zo+pzdQY
 iMltKxZCYaWj6tHw96UrcpfNEi9D0KEjXz7jC47Pr86UOAU4KokiampcMAXCmtEBq/SW
 vGrUX+HwYnI+AYOpUwiGGLPC3fXJq8wGp0Gm5vtAgZs4nQAlZxgoKB6O3QElddfbbbte
 N1Yg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1729797688; x=1730402488;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=meG3MRegPBjtgL4uZyZ5RTrHRdaG/cwO5dy/3PhLjIQ=;
 b=xUv5RzCefTfVFwYIJjO8LQ+QmPiBqyDfirLBrY5aMIz2yf6+rQDqZJSQP6J7YW5c6R
 D5ngFfeu2AFcSjQ5i6SDq5IyPasiBFZbJfhxyCp5G0PzPaocYIEEiZ+g/xWmZGGpP6hk
 HlrnkDC9pusWzmnioqu9SoF4bFH0LsmYrC4dkpFX9fep7HIOvfOx+3WZ6Jl5a0m5tmmd
 90nyRj64JFAIQp9dM5OHJJ4E1mWVh/V6eUjMs1Jof+5SQarFzEKmxhnj63yF2SzKVfrI
 24zHpn94D3zP5zIuebDksqiAxt5VE9gi4o0vBkO8ddBqpu0RprL5twNotOvAPu1epMLz
 9m/A==
X-Gm-Message-State: AOJu0Yzu1288dI5bB3lrFONFIaX0ZhCEaGJ1+AtdOONMh5NYd6GHnODX
 sxt82vprDewjMsGtj8gsstoSz0lgrLDn9YOqVz9dKqUr/5mBJ3JYetMkJFd+XLoDH11Hs4I7rd2
 S7Adg2cb1hmSuaDCn7gszPxN8yh4Zt9Q6
X-Google-Smtp-Source: AGHT+IHRmE9yc0Vu9Z6QucuIItjrXEm5BRIh4GYuXwLp8LmT4c+bzFxLtq2+vaxHG5LPhAdGHG8unnBevUXQCqliCPo=
X-Received: by 2002:a05:6808:1998:b0:3e6:16f7:9742 with SMTP id
 5614622812f47-3e6245a66d3mr7603660b6e.33.1729797688100; Thu, 24 Oct 2024
 12:21:28 -0700 (PDT)
In-Reply-To: <69934a74-6d04-40a0-a75f-b8024bd0af43@mrabarnett.plus.com>
X-Mailman-Approved-At: Thu, 24 Oct 2024 15:44:45 -0400
X-BeenThere: python-list@python.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: General discussion list for the Python programming language
 <python-list.python.org>
List-Unsubscribe: <https://mail.python.org/mailman/options/python-list>,
 <mailto:python-list-request@python.org?subject=unsubscribe>
List-Archive: <https://mail.python.org/pipermail/python-list/>
List-Post: <mailto:python-list@python.org>
List-Help: <mailto:python-list-request@python.org?subject=help>
List-Subscribe: <https://mail.python.org/mailman/listinfo/python-list>,
 <mailto:python-list-request@python.org?subject=subscribe>
X-Mailman-Original-Message-ID: <CAJQBtgm6Re8tj5hKAZ7Zz6+NC-0iqcBH-MKo8gaOMm8A4prZfA@mail.gmail.com>
X-Mailman-Original-References: <4a13731716200669342338ae409e73ca@posteo.de>
 <CAJQBtg=kCr0VMGXvkBcj4U6CwatC2_G2dstO5pS56_koAXJurA@mail.gmail.com>
 <0c080a7d-92de-4518-ac44-78d97fc9e3bb@mrabarnett.plus.com>
 <CAJQBtg=ButLwvoA2USBEV8-q=taRhuC+t6D1HkJMbG9VzTvxnQ@mail.gmail.com>
 <69934a74-6d04-40a0-a75f-b8024bd0af43@mrabarnett.plus.com>
Bytes: 6456

> > > The stack is created on line 760 with os.lstat and entries are appended
> > > on lines 677 (os.rmdir), 679 (os.close) and 689 (os.lstat).
> > >
> > > 'func' is popped off the stack on line 651 and check in the following lines.
> > >
> > > I can't see anywhere else where something else is put onto the stack or
> > > an entry is replaced.

But the _rmtree_safe_fd() compares func to a *dynamically* resolved
reference: os.lstat. If the reference to os changed (or os object was
modified to have new reference at lstat) between the time os.lstat was
added to the stack and the time of comparison, then comparison
would've failed.  To illustrate my idea:

os.lstat = lambda x: x # thread 1
stack.append((os.lstat, ...)) # thread 1
os.lstat = lambda x: x # thread 2
func, *_ = stack.pop() # thread 1
assert func is os.lstat # thread 1 (failure!)

The only question is: is it possible to modify os.lstat like that, and
if so, how?

Other alternatives include a malfunctioning "is" operator,
malfunctioning module cache... all those are a lot less likely.