qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [Bug 1757363] [NEW] infinite loop due to improper deal with "eret" on mips32
@ 2018-03-21  8:38 dantachen
  2018-03-21 15:46 ` [Qemu-devel] [Bug 1757363] " philmd
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: dantachen @ 2018-03-21  8:38 UTC (permalink / raw)
  To: qemu-devel

Public bug reported:

1.qemu 2.9.1 release on the official web build with tcg
2.cmd: qemu-system-mips -kernel kernelfile
3. host: ubuntu 16.04.1 with linux kernel 4.6.2 x86_64
   guest: mips bigendian 32bit (tplink firmware)


detail:

static inline void exception_return(CPUMIPSState *env)
{
    debug_pre_eret(env);
    if (env->CP0_Status & (1 << CP0St_ERL)) {
        set_pc(env, env->CP0_ErrorEPC);
        env->CP0_Status &= ~(1 << CP0St_ERL);
    } else {
        set_pc(env, env->CP0_EPC);
        env->CP0_Status &= ~(1 << CP0St_EXL);====================> ISSUE????
    }
    compute_hflags(env);
    debug_post_eret(env);
}

void helper_eret(CPUMIPSState *env)
{
    exception_return(env);
    env->lladdr = 1;
}


In the Issue Line, there is no check CP0_Status whether int is disabled (should not enter int routine),
that result in the cpu can not jump out the int routine.

** Affects: qemu
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1757363

Title:
  infinite loop due to improper deal with "eret" on mips32

Status in QEMU:
  New

Bug description:
  1.qemu 2.9.1 release on the official web build with tcg
  2.cmd: qemu-system-mips -kernel kernelfile
  3. host: ubuntu 16.04.1 with linux kernel 4.6.2 x86_64
     guest: mips bigendian 32bit (tplink firmware)

  
  detail:

  static inline void exception_return(CPUMIPSState *env)
  {
      debug_pre_eret(env);
      if (env->CP0_Status & (1 << CP0St_ERL)) {
          set_pc(env, env->CP0_ErrorEPC);
          env->CP0_Status &= ~(1 << CP0St_ERL);
      } else {
          set_pc(env, env->CP0_EPC);
          env->CP0_Status &= ~(1 << CP0St_EXL);====================> ISSUE????
      }
      compute_hflags(env);
      debug_post_eret(env);
  }

  void helper_eret(CPUMIPSState *env)
  {
      exception_return(env);
      env->lladdr = 1;
  }

  
  In the Issue Line, there is no check CP0_Status whether int is disabled (should not enter int routine),
  that result in the cpu can not jump out the int routine.

To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1757363/+subscriptions

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Qemu-devel] [Bug 1757363] Re: infinite loop due to improper deal with "eret" on mips32
  2018-03-21  8:38 [Qemu-devel] [Bug 1757363] [NEW] infinite loop due to improper deal with "eret" on mips32 dantachen
@ 2018-03-21 15:46 ` philmd
  2018-06-04 20:04 ` Philippe Mathieu-Daudé
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: philmd @ 2018-03-21 15:46 UTC (permalink / raw)
  To: qemu-devel

** Tags added: mips

-- 
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1757363

Title:
  infinite loop due to improper deal with "eret" on mips32

Status in QEMU:
  New

Bug description:
  1.qemu 2.9.1 release on the official web build with tcg
  2.cmd: qemu-system-mips -kernel kernelfile
  3. host: ubuntu 16.04.1 with linux kernel 4.6.2 x86_64
     guest: mips bigendian 32bit (tplink firmware)

  
  detail:

  static inline void exception_return(CPUMIPSState *env)
  {
      debug_pre_eret(env);
      if (env->CP0_Status & (1 << CP0St_ERL)) {
          set_pc(env, env->CP0_ErrorEPC);
          env->CP0_Status &= ~(1 << CP0St_ERL);
      } else {
          set_pc(env, env->CP0_EPC);
          env->CP0_Status &= ~(1 << CP0St_EXL);====================> ISSUE????
      }
      compute_hflags(env);
      debug_post_eret(env);
  }

  void helper_eret(CPUMIPSState *env)
  {
      exception_return(env);
      env->lladdr = 1;
  }

  
  In the Issue Line, there is no check CP0_Status whether int is disabled (should not enter int routine),
  that result in the cpu can not jump out the int routine.

To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1757363/+subscriptions

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Qemu-devel] [Bug 1757363] Re: infinite loop due to improper deal with "eret" on mips32
  2018-03-21  8:38 [Qemu-devel] [Bug 1757363] [NEW] infinite loop due to improper deal with "eret" on mips32 dantachen
  2018-03-21 15:46 ` [Qemu-devel] [Bug 1757363] " philmd
@ 2018-06-04 20:04 ` Philippe Mathieu-Daudé
  2020-11-17 11:08 ` Philippe Mathieu-Daudé
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-06-04 20:04 UTC (permalink / raw)
  To: qemu-devel

What model/cpu is your router?

Which MIPS guest CPU are you using? Are you sure it matches the CPU of
your router?

Is your tplink firmware publicly available? (to reproduce your problem).

-- 
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1757363

Title:
  infinite loop due to improper deal with "eret" on mips32

Status in QEMU:
  New

Bug description:
  1.qemu 2.9.1 release on the official web build with tcg
  2.cmd: qemu-system-mips -kernel kernelfile
  3. host: ubuntu 16.04.1 with linux kernel 4.6.2 x86_64
     guest: mips bigendian 32bit (tplink firmware)

  
  detail:

  static inline void exception_return(CPUMIPSState *env)
  {
      debug_pre_eret(env);
      if (env->CP0_Status & (1 << CP0St_ERL)) {
          set_pc(env, env->CP0_ErrorEPC);
          env->CP0_Status &= ~(1 << CP0St_ERL);
      } else {
          set_pc(env, env->CP0_EPC);
          env->CP0_Status &= ~(1 << CP0St_EXL);====================> ISSUE????
      }
      compute_hflags(env);
      debug_post_eret(env);
  }

  void helper_eret(CPUMIPSState *env)
  {
      exception_return(env);
      env->lladdr = 1;
  }

  
  In the Issue Line, there is no check CP0_Status whether int is disabled (should not enter int routine),
  that result in the cpu can not jump out the int routine.

To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1757363/+subscriptions

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug 1757363] Re: infinite loop due to improper deal with "eret" on mips32
  2018-03-21  8:38 [Qemu-devel] [Bug 1757363] [NEW] infinite loop due to improper deal with "eret" on mips32 dantachen
  2018-03-21 15:46 ` [Qemu-devel] [Bug 1757363] " philmd
  2018-06-04 20:04 ` Philippe Mathieu-Daudé
@ 2020-11-17 11:08 ` Philippe Mathieu-Daudé
  2021-01-17  4:17 ` Launchpad Bug Tracker
  2021-07-07 12:48 ` Alexey
  4 siblings, 0 replies; 6+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-11-17 11:08 UTC (permalink / raw)
  To: qemu-devel

My guess is your router CPU doesn't match the ISA (likely your CPU has
extensions to the 24Kf ISA).

** Changed in: qemu
       Status: New => Incomplete

-- 
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1757363

Title:
  infinite loop due to improper deal with "eret" on mips32

Status in QEMU:
  Incomplete

Bug description:
  1.qemu 2.9.1 release on the official web build with tcg
  2.cmd: qemu-system-mips -kernel kernelfile
  3. host: ubuntu 16.04.1 with linux kernel 4.6.2 x86_64
     guest: mips bigendian 32bit (tplink firmware)

  
  detail:

  static inline void exception_return(CPUMIPSState *env)
  {
      debug_pre_eret(env);
      if (env->CP0_Status & (1 << CP0St_ERL)) {
          set_pc(env, env->CP0_ErrorEPC);
          env->CP0_Status &= ~(1 << CP0St_ERL);
      } else {
          set_pc(env, env->CP0_EPC);
          env->CP0_Status &= ~(1 << CP0St_EXL);====================> ISSUE????
      }
      compute_hflags(env);
      debug_post_eret(env);
  }

  void helper_eret(CPUMIPSState *env)
  {
      exception_return(env);
      env->lladdr = 1;
  }

  
  In the Issue Line, there is no check CP0_Status whether int is disabled (should not enter int routine),
  that result in the cpu can not jump out the int routine.

To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1757363/+subscriptions


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug 1757363] Re: infinite loop due to improper deal with "eret" on mips32
  2018-03-21  8:38 [Qemu-devel] [Bug 1757363] [NEW] infinite loop due to improper deal with "eret" on mips32 dantachen
                   ` (2 preceding siblings ...)
  2020-11-17 11:08 ` Philippe Mathieu-Daudé
@ 2021-01-17  4:17 ` Launchpad Bug Tracker
  2021-07-07 12:48 ` Alexey
  4 siblings, 0 replies; 6+ messages in thread
From: Launchpad Bug Tracker @ 2021-01-17  4:17 UTC (permalink / raw)
  To: qemu-devel

[Expired for QEMU because there has been no activity for 60 days.]

** Changed in: qemu
       Status: Incomplete => Expired

-- 
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1757363

Title:
  infinite loop due to improper deal with "eret" on mips32

Status in QEMU:
  Expired

Bug description:
  1.qemu 2.9.1 release on the official web build with tcg
  2.cmd: qemu-system-mips -kernel kernelfile
  3. host: ubuntu 16.04.1 with linux kernel 4.6.2 x86_64
     guest: mips bigendian 32bit (tplink firmware)

  
  detail:

  static inline void exception_return(CPUMIPSState *env)
  {
      debug_pre_eret(env);
      if (env->CP0_Status & (1 << CP0St_ERL)) {
          set_pc(env, env->CP0_ErrorEPC);
          env->CP0_Status &= ~(1 << CP0St_ERL);
      } else {
          set_pc(env, env->CP0_EPC);
          env->CP0_Status &= ~(1 << CP0St_EXL);====================> ISSUE????
      }
      compute_hflags(env);
      debug_post_eret(env);
  }

  void helper_eret(CPUMIPSState *env)
  {
      exception_return(env);
      env->lladdr = 1;
  }

  
  In the Issue Line, there is no check CP0_Status whether int is disabled (should not enter int routine),
  that result in the cpu can not jump out the int routine.

To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1757363/+subscriptions


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug 1757363] Re: infinite loop due to improper deal with "eret" on mips32
  2018-03-21  8:38 [Qemu-devel] [Bug 1757363] [NEW] infinite loop due to improper deal with "eret" on mips32 dantachen
                   ` (3 preceding siblings ...)
  2021-01-17  4:17 ` Launchpad Bug Tracker
@ 2021-07-07 12:48 ` Alexey
  4 siblings, 0 replies; 6+ messages in thread
From: Alexey @ 2021-07-07 12:48 UTC (permalink / raw)
  To: qemu-devel

This seems to affect me too; I have a loop on interrupt handler after
the first interrupt called.

The version of qemu is latest 3.1 from upstream, so this is not Ubuntu
issue.

However, have you done with it? Just commenting out

env->CP0_Status &= ~(1 << CP0St_EXL);

does not help.

-- 
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1757363

Title:
  infinite loop due to improper deal with "eret" on mips32

Status in QEMU:
  Expired

Bug description:
  1.qemu 2.9.1 release on the official web build with tcg
  2.cmd: qemu-system-mips -kernel kernelfile
  3. host: ubuntu 16.04.1 with linux kernel 4.6.2 x86_64
     guest: mips bigendian 32bit (tplink firmware)

  
  detail:

  static inline void exception_return(CPUMIPSState *env)
  {
      debug_pre_eret(env);
      if (env->CP0_Status & (1 << CP0St_ERL)) {
          set_pc(env, env->CP0_ErrorEPC);
          env->CP0_Status &= ~(1 << CP0St_ERL);
      } else {
          set_pc(env, env->CP0_EPC);
          env->CP0_Status &= ~(1 << CP0St_EXL);====================> ISSUE????
      }
      compute_hflags(env);
      debug_post_eret(env);
  }

  void helper_eret(CPUMIPSState *env)
  {
      exception_return(env);
      env->lladdr = 1;
  }

  
  In the Issue Line, there is no check CP0_Status whether int is disabled (should not enter int routine),
  that result in the cpu can not jump out the int routine.

To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1757363/+subscriptions


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-07-07 12:57 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-21  8:38 [Qemu-devel] [Bug 1757363] [NEW] infinite loop due to improper deal with "eret" on mips32 dantachen
2018-03-21 15:46 ` [Qemu-devel] [Bug 1757363] " philmd
2018-06-04 20:04 ` Philippe Mathieu-Daudé
2020-11-17 11:08 ` Philippe Mathieu-Daudé
2021-01-17  4:17 ` Launchpad Bug Tracker
2021-07-07 12:48 ` Alexey

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).