All TTY are blocked when I try to use npreal2 driver (Moxa)

Discuss usability issues, general maintenance, and general support issues for a grsecurity-enabled system.

All TTY are blocked when I try to use npreal2 driver (Moxa)

Postby rom2mars » Wed Apr 16, 2014 3:38 am

Hello,

Sorry if my english isn't perfect.

When ethernet cable is unplugged and I send data on my serial tty (ttyr00), every tty are blocked for about one minute (thus X11 can't be used anymore during that minute).

I send data with the command:

Code: Select all
    echo "foobar" > /dev/ttyr00


This problem doesn't appear on kernel 2.6.32-358.el6.i686 (default CentOS 6.4 kernel).


I use CentOs 6.4 Linux with kernel 3.2.54 with grsecurity patch.

Code: Select all
    [root@i_secure ~]# uname -ar
    Linux i-Secure 3.2.54-grsec #1 SMP PREEMPT Wed Mar 5 08:32:11 CET 2014 i686 i686 i386 GNU/Linux



RBAC is not activated.

I try to use Moxa NPort 5110 Series 1-port Ethernet to RS-232 Adapter.
Moxa NPort 5110 is a serial-to-Ethernet converter (More information available here).


Source code of the driver is available here.

Moxa provides a driver called (module) npreal2 and a daemon npreal2d.

Code: Select all
    [root@i_secure ~]# lsmod
    Module       Size    Used    by
    npreal2    182283       1
    tg3        122762       0
    libphy     16486        1   tg3
    xhci_hcd   71392        0



The daemon:

Code: Select all
    [root@i_secure ~]# ps aux|grep -i npreal
    root    2834    0.0    0.0    2464    460   ?    S    Apr15    0:00    /usr/lib/npreal2/driver/npreal2d_redund -t 1
    root    2838    0.0    0.0    2348    476   ?    S    Apr15    0:02    /usr/lib/npreal2/driver/npreal2d -t 1



When I boot the server, rc.local call mxloadsvr script that creates ttyr00, ttyr01, ttyr02, ttyr03 and cur00, cur01, cur02, cur03 and start the npreal2 daemon.

Code: Select all
 [root@i_secure ~]# ls -l /dev/tty*
    crw-rw-rw- 1 root tty   5,  0 16 avril 08:57 /dev/tty
    crw--w---- 1 root tty   4,  0 16 avril 08:57 /dev/tty0
    crw--w---- 1 igc  tty   4,  1 16 avril 09:00 /dev/tty1
    crw--w---- 1 root tty   4, 10 16 avril 08:57 /dev/tty10
    crw--w---- 1 root tty   4, 11 16 avril 08:57 /dev/tty11
    crw--w---- 1 root tty   4, 12 16 avril 08:57 /dev/tty12
    crw--w---- 1 root tty   4, 13 16 avril 08:57 /dev/tty13
    crw--w---- 1 root tty   4, 14 16 avril 08:57 /dev/tty14
    crw--w---- 1 root tty   4, 15 16 avril 08:57 /dev/tty15
    crw--w---- 1 root tty   4, 16 16 avril 08:57 /dev/tty16
    crw--w---- 1 root tty   4, 17 16 avril 08:57 /dev/tty17
    crw--w---- 1 root tty   4, 18 16 avril 08:57 /dev/tty18
    crw--w---- 1 root tty   4, 19 16 avril 08:57 /dev/tty19
    crw------- 1 root root  4,  2 16 avril 08:58 /dev/tty2
    crw--w---- 1 root tty   4, 20 16 avril 08:57 /dev/tty20
    crw--w---- 1 root tty   4, 21 16 avril 08:57 /dev/tty21
    crw--w---- 1 root tty   4, 22 16 avril 08:57 /dev/tty22
    crw--w---- 1 root tty   4, 23 16 avril 08:57 /dev/tty23
    crw--w---- 1 root tty   4, 24 16 avril 08:57 /dev/tty24
    crw--w---- 1 root tty   4, 25 16 avril 08:57 /dev/tty25
    crw--w---- 1 root tty   4, 26 16 avril 08:57 /dev/tty26
    crw--w---- 1 root tty   4, 27 16 avril 08:57 /dev/tty27
    crw--w---- 1 root tty   4, 28 16 avril 08:57 /dev/tty28
    crw--w---- 1 root tty   4, 29 16 avril 08:57 /dev/tty29
    crw------- 1 root root  4,  3 16 avril 08:58 /dev/tty3
    crw--w---- 1 root tty   4, 30 16 avril 08:57 /dev/tty30
    crw--w---- 1 root tty   4, 31 16 avril 08:57 /dev/tty31
    crw--w---- 1 root tty   4, 32 16 avril 08:57 /dev/tty32
    crw--w---- 1 root tty   4, 33 16 avril 08:57 /dev/tty33
    crw--w---- 1 root tty   4, 34 16 avril 08:57 /dev/tty34
    crw--w---- 1 root tty   4, 35 16 avril 08:57 /dev/tty35
    crw--w---- 1 root tty   4, 36 16 avril 08:57 /dev/tty36
    crw--w---- 1 root tty   4, 37 16 avril 08:57 /dev/tty37
    crw--w---- 1 root tty   4, 38 16 avril 08:57 /dev/tty38
    crw--w---- 1 root tty   4, 39 16 avril 08:57 /dev/tty39
    crw------- 1 root root  4,  4 16 avril 08:58 /dev/tty4
    crw--w---- 1 root tty   4, 40 16 avril 08:57 /dev/tty40
    crw--w---- 1 root tty   4, 41 16 avril 08:57 /dev/tty41
    crw--w---- 1 root tty   4, 42 16 avril 08:57 /dev/tty42
    crw--w---- 1 root tty   4, 43 16 avril 08:57 /dev/tty43
    crw--w---- 1 root tty   4, 44 16 avril 08:57 /dev/tty44
    crw--w---- 1 root tty   4, 45 16 avril 08:57 /dev/tty45
    crw--w---- 1 root tty   4, 46 16 avril 08:57 /dev/tty46
    crw--w---- 1 root tty   4, 47 16 avril 08:57 /dev/tty47
    crw--w---- 1 root tty   4, 48 16 avril 08:57 /dev/tty48
    crw--w---- 1 root tty   4, 49 16 avril 08:57 /dev/tty49
    crw------- 1 root root  4,  5 16 avril 08:58 /dev/tty5
    crw--w---- 1 root tty   4, 50 16 avril 08:57 /dev/tty50
    crw--w---- 1 root tty   4, 51 16 avril 08:57 /dev/tty51
    crw--w---- 1 root tty   4, 52 16 avril 08:57 /dev/tty52
    crw--w---- 1 root tty   4, 53 16 avril 08:57 /dev/tty53
    crw--w---- 1 root tty   4, 54 16 avril 08:57 /dev/tty54
    crw--w---- 1 root tty   4, 55 16 avril 08:57 /dev/tty55
    crw--w---- 1 root tty   4, 56 16 avril 08:57 /dev/tty56
    crw--w---- 1 root tty   4, 57 16 avril 08:57 /dev/tty57
    crw--w---- 1 root tty   4, 58 16 avril 08:57 /dev/tty58
    crw--w---- 1 root tty   4, 59 16 avril 08:57 /dev/tty59
    crw------- 1 root root  4,  6 16 avril 08:58 /dev/tty6
    crw--w---- 1 root tty   4, 60 16 avril 08:57 /dev/tty60
    crw--w---- 1 root tty   4, 61 16 avril 08:57 /dev/tty61
    crw--w---- 1 root tty   4, 62 16 avril 08:57 /dev/tty62
    crw--w---- 1 root tty   4, 63 16 avril 08:57 /dev/tty63
    crw--w---- 1 root tty   4,  7 16 avril 08:57 /dev/tty7
    crw--w---- 1 root tty   4,  8 16 avril 08:57 /dev/tty8
    crw--w---- 1 root tty   4,  9 16 avril 08:57 /dev/tty9
    crw-rw---- 1 root tty   3,  0 16 avril 08:57 /dev/ttyp0
    crw-rw---- 1 root tty   3,  1 16 avril 08:57 /dev/ttyp1
    crw-rw---- 1 root tty   3,  2 16 avril 08:57 /dev/ttyp2
    crw-rw---- 1 root tty   3,  3 16 avril 08:57 /dev/ttyp3
    crw-rw---- 1 root tty   3,  4 16 avril 08:57 /dev/ttyp4
    crw-rw---- 1 root tty   3,  5 16 avril 08:57 /dev/ttyp5
    crw-rw---- 1 root tty   3,  6 16 avril 08:57 /dev/ttyp6
    crw-rw---- 1 root tty   3,  7 16 avril 08:57 /dev/ttyp7
    crw-rw---- 1 root tty   3,  8 16 avril 08:57 /dev/ttyp8
    crw-rw---- 1 root tty   3,  9 16 avril 08:57 /dev/ttyp9
    crw-rw---- 1 root tty   3, 10 16 avril 08:57 /dev/ttypa
    crw-rw---- 1 root tty   3, 11 16 avril 08:57 /dev/ttypb
    crw-rw---- 1 root tty   3, 12 16 avril 08:57 /dev/ttypc
    crw-rw---- 1 root tty   3, 13 16 avril 08:57 /dev/ttypd
    crw-rw---- 1 root tty   3, 14 16 avril 08:57 /dev/ttype
    crw-rw---- 1 root tty   3, 15 16 avril 08:57 /dev/ttypf
    crw-rw---- 1 root tty   3, 16 16 avril 08:57 /dev/ttyq0
    crw-rw---- 1 root tty   3, 17 16 avril 08:57 /dev/ttyq1
    crw-rw---- 1 root tty   3, 18 16 avril 08:57 /dev/ttyq2
    crw-rw---- 1 root tty   3, 19 16 avril 08:57 /dev/ttyq3
    crw-rw---- 1 root tty   3, 20 16 avril 08:57 /dev/ttyq4
    crw-rw---- 1 root tty   3, 21 16 avril 08:57 /dev/ttyq5
    crw-rw---- 1 root tty   3, 22 16 avril 08:57 /dev/ttyq6
    crw-rw---- 1 root tty   3, 23 16 avril 08:57 /dev/ttyq7
    crw-rw---- 1 root tty   3, 24 16 avril 08:57 /dev/ttyq8
    crw-rw---- 1 root tty   3, 25 16 avril 08:57 /dev/ttyq9
    crw-rw---- 1 root tty   3, 26 16 avril 08:57 /dev/ttyqa
    crw-rw---- 1 root tty   3, 27 16 avril 08:57 /dev/ttyqb
    crw-rw---- 1 root tty   3, 28 16 avril 08:57 /dev/ttyqc
    crw-rw---- 1 root tty   3, 29 16 avril 08:57 /dev/ttyqd
    crw-rw---- 1 root tty   3, 30 16 avril 08:57 /dev/ttyqe
    crw-rw---- 1 root tty   3, 31 16 avril 08:57 /dev/ttyqf
    crw-rw---- 1 root tty   3, 32 16 avril 08:57 /dev/ttyr0
    crw-rw-rw- 1 root root 33,  0 16 avril 08:58 /dev/ttyr00
    crw-rw-rw- 1 root root 33,  0 16 avril 08:58 /dev/ttyr01
    crw-rw-rw- 1 root root 33,  0 16 avril 08:58 /dev/ttyr02
    crw-rw-rw- 1 root root 33,  0 16 avril 08:58 /dev/ttyr03
    crw-rw---- 1 root tty   3, 33 16 avril 08:57 /dev/ttyr1
    crw-rw---- 1 root tty   3, 34 16 avril 08:57 /dev/ttyr2
    crw-rw---- 1 root tty   3, 35 16 avril 08:57 /dev/ttyr3
    crw-rw---- 1 root tty   3, 36 16 avril 08:57 /dev/ttyr4
    crw-rw---- 1 root tty   3, 37 16 avril 08:57 /dev/ttyr5
    crw-rw---- 1 root tty   3, 38 16 avril 08:57 /dev/ttyr6
    crw-rw---- 1 root tty   3, 39 16 avril 08:57 /dev/ttyr7
    crw-rw---- 1 root tty   3, 40 16 avril 08:57 /dev/ttyr8
    crw-rw---- 1 root tty   3, 41 16 avril 08:57 /dev/ttyr9
    crw-rw---- 1 root tty   3, 42 16 avril 08:57 /dev/ttyra
    crw-rw---- 1 root tty   3, 43 16 avril 08:57 /dev/ttyrb
    crw-rw---- 1 root tty   3, 44 16 avril 08:57 /dev/ttyrc
    crw-rw---- 1 root tty   3, 45 16 avril 08:57 /dev/ttyrd
    crw-rw---- 1 root tty   3, 46 16 avril 08:57 /dev/ttyre
    crw-rw---- 1 root tty   3, 47 16 avril 08:57 /dev/ttyrf
    crw-rw---- 1 root tty   3, 48 16 avril 08:57 /dev/ttys0
    crw-rw---- 1 root tty   3, 49 16 avril 08:57 /dev/ttys1
    crw-rw---- 1 root tty   3, 50 16 avril 08:57 /dev/ttys2
    crw-rw---- 1 root tty   3, 51 16 avril 08:57 /dev/ttys3
    crw-rw---- 1 root tty   3, 52 16 avril 08:57 /dev/ttys4
    crw-rw---- 1 root tty   3, 53 16 avril 08:57 /dev/ttys5
    crw-rw---- 1 root tty   3, 54 16 avril 08:57 /dev/ttys6
    crw-rw---- 1 root tty   3, 55 16 avril 08:57 /dev/ttys7
    crw-rw---- 1 root tty   3, 56 16 avril 08:57 /dev/ttys8
    crw-rw---- 1 root tty   3, 57 16 avril 08:57 /dev/ttys9
    crw-rw---- 1 root tty   3, 58 16 avril 08:57 /dev/ttysa
    crw-rw---- 1 root tty   3, 59 16 avril 08:57 /dev/ttysb
    crw-rw---- 1 root tty   3, 60 16 avril 08:57 /dev/ttysc
    crw-rw---- 1 root tty   3, 61 16 avril 08:57 /dev/ttysd
    crw-rw---- 1 root tty   3, 62 16 avril 08:57 /dev/ttyse
    crw-rw---- 1 root tty   3, 63 16 avril 08:57 /dev/ttysf




Below is the npreal2d config file:

Code: Select all
 #=========================================================#
    #   This configuration file is created by Moxa NPort      #
    #   Administrator Program automatically, please do not    #
    #   modify this file by yourself.                         #
    #=========================================================#
    ttymajor=33
    calloutmajor=38
    #[Minor] [ServerIP]   [data]   [cmd]   [FIFO]   [SSL]   [ttyName] [coutName] [interface][mode][BackIP]
    0   200.4.1.1   950   966   1   0   ttyr00   cur00   0   0   (null)
    0   200.4.1.2   950   966   1   0   ttyr01   cur01   0   0   (null)
    0   200.4.1.3   950   966   1   0   ttyr02   cur02   0   0   (null)
    0   200.4.1.3   951   967   1   0   ttyr03   cur03   0   0   (null)

Below is log file of npreal2d:

Code: Select all
 04-15-2014 18:00:42  Master tty open fail (/proc/npreal2/0) !
    04-15-2014 18:00:42  Master tty open fail (/proc/npreal2/0) !
    04-15-2014 18:00:42  Master tty open fail (/proc/npreal2/0) !
    04-15-2014 18:12:43  Can not open the polling_nport_fd socket !
    04-15-2014 18:12:43  MOXA Real TTY daemon program starting (Ver1.18 Build 12020919)...
    04-15-2014 18:12:43  Master tty open fail (/proc/npreal2/0) !
    04-15-2014 18:12:43  Master tty open fail (/proc/npreal2/0) !
    04-15-2014 18:12:43  Master tty open fail (/proc/npreal2/0) !
    04-15-2014 18:13:04  200.4.1.1 is alive
    04-15-2014 18:14:15  Socket connect fail (200.4.1.1,TCP port 950) !
    04-15-2014 18:14:15  Socket connect fail (200.4.1.1,TCP port 950) !
    04-15-2014 18:48:41  Can not open the polling_nport_fd socket !
    04-15-2014 18:48:41  MOXA Real TTY daemon program starting (Ver1.18 Build 12020919)...
    04-15-2014 18:48:41  Can not open the polling_nport_fd socket !
    04-15-2014 18:48:41  MOXA Real TTY daemon program starting (Ver1.18 Build 12020919)...
    04-15-2014 18:48:41  Master tty open fail (/proc/npreal2/0) !
    04-15-2014 18:48:41  Master tty open fail (/proc/npreal2/0) !
    04-15-2014 18:48:41  Master tty open fail (/proc/npreal2/0) !
    04-15-2014 19:01:39  200.4.1.1 is alive
    04-15-2014 19:03:20  Socket connect fail (200.4.1.1,TCP port 950) !
    04-15-2014 19:03:20  Socket connect fail (200.4.1.1,TCP port 950) !
    04-15-2014 19:10:47  Socket connect fail (200.4.1.1,TCP port 950) !
    04-15-2014 19:10:47  Socket connect fail (200.4.1.1,TCP port 950) !
    04-16-2014 08:47:29  Socket connect fail (200.4.1.1,TCP port 950) !
    04-16-2014 08:47:29  Socket connect fail (200.4.1.1,TCP port 950) !



I have tried to change tty options like this :
Code: Select all
stty-F /dev/ttyr00 -icanon min 0 time 1



Thanks for your help.

Regards.

Romain
rom2mars
 
Posts: 16
Joined: Fri Feb 07, 2014 10:52 am

Re: All TTY are blocked when I try to use npreal2 driver (Mo

Postby PaX Team » Thu Apr 17, 2014 5:46 am

1. does vanilla 3.2.5x work fine? (also try to test the latest version please)
2. does the grsec kernel work if you disable all options? if it does then you could do a binary search for the option that triggers this behaviour then we can do more targeted debugging.
3. are there any possibly related kernel logs?
PaX Team
 
Posts: 2310
Joined: Mon Mar 18, 2002 4:35 pm

Re: All TTY are blocked when I try to use npreal2 driver (Mo

Postby rom2mars » Wed May 14, 2014 3:48 am

Thanks for your answer.

1. I will try (later) with vanilla 3.2.5x. Could I use the same .config?

2. Which options? sysctl (runtime)? or the options grsec in .config (compiling) kernel?

3. I don't have kernel log. :(

Thank you for your help.

Sorry for my english.

Best regards,
Romain
rom2mars
 
Posts: 16
Joined: Fri Feb 07, 2014 10:52 am

Re: All TTY are blocked when I try to use npreal2 driver (Mo

Postby PaX Team » Wed May 14, 2014 4:04 pm

1. run 'make oldconfig' and it should work.
2. i meant all the grsec/PaX options in .config.
PaX Team
 
Posts: 2310
Joined: Mon Mar 18, 2002 4:35 pm

Re: All TTY are blocked when I try to use npreal2 driver (Mo

Postby rom2mars » Wed Jun 04, 2014 11:29 am

Thank you,

THe problem is same without patch grsecurity kernel.
rom2mars
 
Posts: 16
Joined: Fri Feb 07, 2014 10:52 am


Return to grsecurity support

cron