From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754302AbbHNBiT (ORCPT ); Thu, 13 Aug 2015 21:38:19 -0400 Received: from mail-oi0-f41.google.com ([209.85.218.41]:33304 "EHLO mail-oi0-f41.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751622AbbHNBiS convert rfc822-to-8bit (ORCPT ); Thu, 13 Aug 2015 21:38:18 -0400 MIME-Version: 1.0 In-Reply-To: <55CD4515.2030202@list.ru> References: <55CA90B4.2010205@list.ru> <20150813200823.GS2059@uranus> <55CD0F29.4070604@gmail.com> <55CD13F3.1070904@list.ru> <55CD1968.7070002@list.ru> <55CD1F79.2010508@list.ru> <55CD2F9A.9040300@list.ru> <55CD3382.5070506@list.ru> <55CD3B3F.9040203@list.ru> <55CD4515.2030202@list.ru> From: Andy Lutomirski Date: Thu, 13 Aug 2015 18:37:57 -0700 Message-ID: Subject: Re: [regression] x86/signal/64: Fix SS handling for signals delivered to 64-bit programs breaks dosemu To: Stas Sergeev Cc: Linus Torvalds , Raymond Jennings , Cyrill Gorcunov , Pavel Emelyanov , Linux kernel Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Aug 13, 2015 at 6:32 PM, Stas Sergeev wrote: > 14.08.2015 04:21, Andy Lutomirski пишет: > >> On Thu, Aug 13, 2015 at 5:50 PM, Stas Sergeev wrote: >>> >>> 14.08.2015 03:27, Linus Torvalds пишет: >>>> >>>> On Thu, Aug 13, 2015 at 5:17 PM, Stas Sergeev wrote: >>>>> >>>>> For example because you can as well do: >>>>> prctl(ARCH_SET_SIGNAL_SS, 0) >>>>> which will mean "restore ss in sighandler to its current value", >>>> >>>> I really think a prctl() is the wrong thing to do. >>>> >>>> If you want a signal handler to save/restore segments, I think it >>>> should be a SA_xyz flag to sigaction() (the way we have SA_RESTART >>> >>> Yes, I was proposing the new sigaction() flag in this thread >>> already too. But at the end, prctl() looks better to me because >>> it allows to pass the TLS value to use when restoring FS. >>> The thing is that I am trying to find the similar treatment for >>> both the SS and FS problems. If you don't think they need a >>> similar treatment, then perhaps the Andy's patch is enough. >>> >>>> etc). And off by default because of the obvious compatibility issues. >>> >>> Of course. >>> >>> So, what we have right now (in the latest Andy's patch) is: >>> 1. lar heuristics >>> 2. new uc_flags flag >>> >>> What it solves: dosemu's regression. >>> >>> What prctl() can give: >>> - fix to dosemu's regression >>> - fix to the TLS problem in the future >>> - no hack and heuristics >>> >>> With SA_xyz you can only solve the SS problem, so it is >>> probably not any better than the uc_flags things coded >>> up by Andy. >> >> I'm leaning slightly toward LAR heuristic + SA_SAVE_SS. > > Stop right here, doesn't the SA_xyz allow to avoid the > lar heuristic? Why would you still need the lar heuristic then? > Just call it SA_RESTORE_SS instead of SA_SAVE_SS, and > the lar heuristic is gone. The LAR heuristic is about five lines of code, and it makes signal delivery more reliable. Sure, we could gate the "regs->ss = __USER_DS" line on a flag, but why? > >> Unfortunately, I don't think we were clever enough to allow this to be >> probed easily -- we silently ignore unrecognized sa_flags bits. > > Big deal, check the kversion. :) Not so good. For example, if you made your DOSEMU patch to use the saved SS check the version, then the backported revert would break you. --Andy