RFR(M): 8141529: Fix handling of _JAVA_SR_SIGNUM

Lindenmaier, Goetz goetz.lindenmaier at sap.com
Thu Nov 12 08:36:20 UTC 2015


OK I'll change it to NSIG.  That's used in other places in os_linux, too.
So it's really more consistent.

Best regards,
  Goetz

> -----Original Message-----
> From: Dmitry Samersoff [mailto:dmitry.samersoff at oracle.com]
> Sent: Donnerstag, 12. November 2015 09:22
> To: David Holmes; Lindenmaier, Goetz; hotspot-runtime-
> dev at openjdk.java.net; serviceability-dev
> Subject: Re: RFR(M): 8141529: Fix handling of _JAVA_SR_SIGNUM
> 
> David,
> 
> I think it's better to use NSIG (without underscore) defined in signal.h
> 
> -Dmitry
> 
> 
> On 2015-11-12 10:35, David Holmes wrote:
> > Hi Goetz,
> >
> > Adding in serviceability-dev
> >
> > On 9/11/2015 6:22 PM, Lindenmaier, Goetz wrote:
> >> Hi,
> >>
> >> The environment variable _JAVA_SR_SIGNUM can be set to a signal
> number
> >> do be used by the JVM's suspend/resume mechanism.
> >>
> >> If set, a signal handler is installed and the current signal handler
> >> is saved to an array.
> >> On linux, this array had size MAXSIGNUM=32, and _JAVA_SR_SIGNUM
> was
> >> allowed
> >> to range up to _NSIG=65. This could cause memory corruption.
> >>
> >> Further, in jsig.c, an unsinged int is used to set a bit for signals.
> >> This also
> >> is too small, as only 32 signals can be supported.  Further, the
> >> signals are mapped
> >> wrong to these bits.  '0' is not a valid signal, but '32' was.  1<<32
> >> happens to map to
> >> zero, so the signal could be stored, but this probably was not
> >> intended that way.
> >>
> >> This change increases MAXSIGNUM to 65 on linux, and to 64 on aix. It
> >> introduces
> >> proper checking of the signal read from the env var, and issues a
> >> warning if it
> >> does not use the signal set.  It adapts the data types in jisig.c
> >> properly.
> >>
> >> Please review this change.  I please need a sponsor.
> >> http://cr.openjdk.java.net/~goetz/webrevs/8141529-NSIG/webrev.00
> >
> > This all sounds very good to me. (I must find out why Solaris is not
> > involved here :) ).
> >
> > On Linux you didn't add the bounds check to os::Linux::set_our_sigflags.
> >
> > I'm also wondering about documenting where we are determining the
> > maximum from? Is it simply _NSIG on some/all distributions? And I see
> > _NSIG is supposed to be the biggest signal number + one. Also linux
> > defines NSIG = _NSIG so which should we be using?
> >
> > Thanks,
> > David
> >
> >> Best regards,
> >>    Goetz.
> >>
> 
> 
> --
> Dmitry Samersoff
> Oracle Java development team, Saint Petersburg, Russia
> * I would love to change the world, but they won't give me the sources.


More information about the hotspot-runtime-dev mailing list