← Back to team overview

kernel-packages team mailing list archive

[Bug 1548414] Re: Floating-point exception handler receives empty Data-Exception Code in Floating Point Control register

 

New kernel upload has entered xenial-proposed, and is being tested
before migrating to release component

For full changelog see:

https://launchpad.net/ubuntu/+source/linux/4.4.0-9.24

Kernel release process workflow bug for this kernel is at:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1551319

To see progress of this kernel being released to xenial release
component.

Highlights from the changelog:
  * s390x: correct restore of high gprs on signal return (LP: #1550468)
    - s390/compat: correct restore of high gprs on signal return
  * Floating-point exception handler receives empty Data-Exception Code in
    Floating Point Control register (LP: #1548414)
    - s390/fpu: signals vs. floating point control register
  * Various failures of kernel_security suite on Xenial kernel on s390x arch
    (LP: #1531327)
    - [config] s390x -- CONFIG_DEFAULT_MMAP_MIN_ADDR=65536

-- 
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to linux in Ubuntu.
https://bugs.launchpad.net/bugs/1548414

Title:
  Floating-point exception handler receives empty Data-Exception Code in
  Floating Point Control register

Status in linux package in Ubuntu:
  Fix Committed
Status in linux source package in Xenial:
  Fix Committed

Bug description:
  == Comment: #0 - Alexander Efremkin <a.efremkin@xxxxxxxxxx> - 2016-02-17 12:18:14 ==
  With a C program sets FPE handler and triggers an FPE exception, it expects that machine-dependent context data, which is passed to the handler, will contain sensible values.

  In this scenario, however, FPC register was zero and contained no DXC
  (Data-Exception Code) indication:

  #include <stdio.h>
  #include <string.h>
  #include <signal.h>

  void trapFunction() {
     asm volatile ("lhi %r1,0\n\t"
                   "cit %r1,0,8\n\t");
  }

  static void sigFPE_handler(int signal, siginfo_t *info, void *context) {
     ucontext_t *uc = context;
     mcontext_t mc = uc->uc_mcontext;
     fpregset_t fpregs = mc.fpregs;
     unsigned int fpc = fpregs.fpc;

     printf("received signal!\n");
     printf("fpc: %08x\n", fpc );
  }

  int main() {
     struct sigaction action;
     memset(&action, '\0', sizeof(action));

     printf("registering signal handler\n");

     action.sa_flags |= SA_SIGINFO;
     action.sa_sigaction = sigFPE_handler;
     if (sigaction(SIGFPE, &action, NULL))
        printf("error calling sigaction\n");

     printf("firing trap\n");
     trapFunction();
     return 0;
  }

  This program prints "fpc: 00000000", but the expected output is "fpc:
  0000ff00"..

  The IBM Java team has encountered test failures around the use of trap
  instructions; Linux on z Distribution Test reproduced the issue on the
  following system:

  z13 LPAR
  Ubuntu 16.04
  Kernel 4.4.0-4-generic
  gcc (Ubuntu 5.3.1-8ubuntu2) 5.3.1 20160205
  libc6 2.21-0ubuntu5

  Also, similar issue has been found during test of SIMD (vector)
  instructions, FPC contents was also zero, whereas it expected at least
  an exception mask and vector-defined DXC.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1548414/+subscriptions