Hello to all cpint user! / Hello Neale Ferguson!

I think I've discovered a bug in cpcmd.c
When running hcp in a Guest with 2GB hcp fails with a segmentation
violation. The same code runs very well if the guest just has 1GB.

Process hcp (pid: 1013, stackpage=0000000079039000)

Kernel PSW:    0700200180000000 0000000080abf846
task: 0000000079038000 ksp: 000000007903bd20 pt_regs: 000000007903bc40
Kernel GPRS:
0000000000000008  0000000000002000
000000007900ee00  000000007900c000
0000000060000008  0000000000001fff
ffffffffffffffea  0000000000000000
000000007900e000  000000007900ee00
00000000800041f0  000000007900ee00
000000007900c000  0000000080abfe00
0000000080abf6e0  000000007903bd20
Kernel ACRS:
00000000  00000000  00000000  00000000
00000001  00000000  00000000  00000000
00000000  00000000  00000000  00000000
00000000  00000000  00000000  00000000
Kernel BackChain          CallChain
       000000007903bd20   [<0000000080abf6e0>]
       000000007903bde0   [<000000000014c67a>]
       000000007903be80   [<0000000000101e3c>]

According to PSW 0700200180000000 0000000080abf846 and the
kernel-symbol-table
[root@linux6 root]# grep /proc/ksyms -e "0000000080abf"
0000000080abf4cc cpcmd_release  [cpint]
0000000080abff00 cpint_fops     [cpint]
0000000080abfef0 __insmod_cpint_S.data_L1488    [cpint]
0000000080abf0b8 cpint_open     [cpint]
0000000080abf9c4 applmon_open   [cpint]
0000000080abf0b8 __insmod_cpint_S.text_L3100    [cpint]
0000000080abfef8 cpint_major    [cpint]
0000000080abf574 cpcmd_read     [cpint]
0000000080abf320 cpcmd_open     [cpint]
0000000080abfb38 applmon_release        [cpint]
0000000080abf660 cpcmd_write    [cpint]
0000000080abfcd4 __insmod_cpint_S.rodata_L444   [cpint]
0000000080abfba0 applmon_write  [cpint]
0000000080abff90 cpcmd_fops     [cpint]
0000000080abf000
__insmod_cpint_O/lib/modules/2.4.7/kernel/drivers/s390/char/cpint.o_M000000003C726031_V132103

 [cpint]
0000000080abfefc cpint_nr_devs  [cpint]
0000000080abf940 cpcmd_ioctl    [cpint]
we are in cpcmd_write  at offset 1E6

>From objdump: cpcmd_Write starts at cpint + 5a8
00000000000005a8 <cpcmd_write>:
 5a8:   eb 6f f0 30 00 24       stmg    %r6,%r15,48(%r15)

and 5a8+1e6 = 78e, which means  we just tried to execute sam31.
 788:   a7 5a ff ff             ahi     %r5,-1
 78c:   01 0d                   sam31
 78e:   83 24 00 08             diag    %r2,%r4,8
 792:   01 0e                   sam64
 794:   b2 22 00 90             ipm     %r9

and now I don't know further. But I'think it's the location of the code
which isn't a 31Bit range (above 0x80000000).

Maybe someone of you has any idea. (I cannot compile a module for 31Bit, or
can I?).


Mit freundlichen Gruessen / best regards

                  Thomas Weinzettl


IBM Austria - Integrated Technology Services

Reply via email to