Mark Kettenis <mark.kette...@xs4all.nl> wrote:

> > From: "Theo de Raadt" <dera...@openbsd.org>
> > Date: Sat, 22 Jun 2024 06:16:03 -0600
> > 
> > Mark Kettenis <mark.kette...@xs4all.nl> wrote:
> > 
> > > Theo pointed out the NOBTCFI reversal here.  Now the reason that we
> > > still see SIGILL despite fixes to the assembly code is because the
> > > -mbranch-protection=pac-ret option added by the configure script
> > > actually downgrades our default of enabling both BTI and PAC to just
> > > enabling PAC.  So the necessary BTI instructrions were missing from
> > > the C code.
> > 
> > How did this issue arise?  Is PAC without BTI the case on MacOS?
> 
> Well, M1 did have PAC but no BTI.  BTI only came with M2.
> 
> > > With the diff below things seem to work fine on Apple M2.  There is
> > > one failure in the testsuite:
> > >   1) Failure:
> > > TestIO_Console#test_failed_path 
> > > [/home/ports/pobj/ruby-3.3.3/ruby-3.3.3/test/io/console/test_io_console.rb:46]:
> > > [Errno::ENODEV, Errno::ENOTTY, Errno::EBADF, Errno::ENXIO] exception 
> > > expected, not #<Errno::EOPNOTSUPP: Operation not supported - /dev/null>.
> > > 
> > > but I'm pretty sure that is unrelated to BTI support.
> > 
> > I suspect that's the recent delution over "isatty is poorly standardized,
> > and we believe it should return linux errno".
> 
> Not sure if it isatty(3), but it is related to an ioctl on /dev/null.
> And we have a problem in OpenBSD here.
> 
> On amd64, the mmioctl() function returns ENODEV for unimplemented
> ioctls.  And this is one of the values that ruby expects.  But on most
> other architectures mmioctl() return EOPNOTSUPP.  I think that's a bug
> introduced 23 years ago by christos when an MI mmioctl() was
> introduced in NetBSD that got somehow copied into our MD variants of
> mmioctl().

Yes, that is a bug.

> That said, I think the actual correct return value should be ENOTTY is
> that is what our man page and POSIX say.  And that would probably fix
> isatty(3) as well, which according to the man page should return
> ENOTTY if the file descriptor isn't associated with a terminal.  This
> is what modern FreeBSD does.

This remains contentious:

https://austingroupbugs.net/view.php?id=618

Reply via email to