LINUX.ORG.RU

OpenVPN - TUN.ko. Компиляция

 , , , ,


0

1

Добрый день. Имею железяку huawei 4G роутер (портативный) и желание поднять OPENVPN на ней.

Сам OPENVPN скомпилирован и работает - проблем нет. С Tun.ko возникли проблемы. В ядре его (как обычно) нет. Пришлось компилировать. Железяка

/system/bin/busybox uname -a
Linux localhost 3.4.5 armv7l #1 PREEMPT Tue Apr 10 14:53:30 CST 2018 armv7l GNU/Linux
echo `uname -m` `cat /proc/version`
Linux version 3.4.5 (wangxu@SIA1000027021) (gcc version 4.6.x-google 20120106 (prerelease) (GCC) ) #1 PREEMPT Tue Jun 21 18:53:30 CST 2016

Исходников ядра конечно же нет. Были взяты Kernel linux-3.4.5 и 4.6.x-google_prerelease_toolchain (arm-linux-androideabi-4.6)

Компилировал ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- O=build KERNELRELEASE=3.4.5 На выходе получил Tun.ko, залил на железо.

#insmod /online/tun.ko
#lsmod | grep tun
tun 13831 0 - Live 0xbf044000
#dmesg
....
<6>[000447604ms] tun: Universal TUN/TAP device driver, 1.6
<6>[000447604ms] tun: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
Вроде как все хорошо.

Добавил

#mkdir -p /dev/net
#/system/bin/busybox mknod /dev/net/tun c 10 200
#chmod 600 /dev/net/tun
Итог 
#ls /dev | grep tun
tun
#ls /dev/net | grep tun
tun
Далее начинаются непонятки. При любом чихе в сторону TUN
#openvpn --mktun --dev tap0
#cat /dev/net/tun
#openvpn --verb 8 --config /online/vps_client.ovpn
... без разницы, железка уходит в ребут. Из очевидных логов только:
<6>[000447604ms] tun: Universal TUN/TAP device driver, 1.6
<6>[000447604ms] tun: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
----Тут любое касание tun----
<1>[000450546ms] Unable to handle kernel NULL pointer dereference at virtual address 00000010
<1>[000450554ms] pgd = c127c000
<1>[000450558ms] [00000010] *pgd=00000000
<0>[000450561ms] Internal error: Oops: 805 [#1] PREEMPT ARM
<4>[000450566ms] Modules linked in: tun dhd(O) ctf(PO)
<4>[000450570ms] CPU: 0    Tainted: P           O  (3.4.5 #1)
<4>[000450576ms] PC is at tun_chr_open+0x34/0x88 [tun]
<4>[000450580ms] LR is at misc_open+0xac/0x1b0
<4>[000450584ms] pc : [<bf044564>]    lr : [<c01cc0cc>]    psr: 60000013
<4>[000450584ms] sp : c103be08  ip : 00000000  fp : b6f4dded
<4>[000450595ms] r10: 00000000  r9 : 00000000  r8 : bf046b08
<4>[000450601ms] r7 : c07f0ce0  r6 : c218aae0  r5 : c185c900  r4 : c185c900
<4>[000450607ms] r3 : 00000010  r2 : c103a008  r1 : c103be08  r0 : 00000000
<4>[000450613ms] Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
<4>[000450620ms] Control: 18c53c7d  Table: 55d7c059  DAC: 00000015
<4>[000450626ms] 
...................
<4>[000451313ms] [<bf044564>] (tun_chr_open+0x34/0x88 [tun]) from [<c01cc0cc>] (misc_open+0xac/0x1b0)
<4>[000451322ms] [<c01cc0cc>] (misc_open+0xac/0x1b0) from [<c00b9708>] (chrdev_open+0xb8/0x19c)
<4>[000451330ms] [<c00b9708>] (chrdev_open+0xb8/0x19c) from [<c00b3f84>] (__dentry_open.isra.14+0x1b8/0x2a0)
<4>[000451339ms] [<c00b3f84>] (__dentry_open.isra.14+0x1b8/0x2a0) from [<c00c2f8c>] (do_last.isra.34+0x31c/0x6d0)
<4>[000451349ms] [<c00c2f8c>] (do_last.isra.34+0x31c/0x6d0) from [<c00c351c>] (path_openat+0xb8/0x390)
<4>[000451358ms] [<c00c351c>] (path_openat+0xb8/0x390) from [<c00c38e0>] (do_filp_open+0x2c/0x80)
<4>[000451366ms] [<c00c38e0>] (do_filp_open+0x2c/0x80) from [<c00b4d6c>] (do_sys_open+0xe4/0x180)
<4>[000451374ms] [<c00b4d6c>] (do_sys_open+0xe4/0x180) from [<c0011040>] (ret_fast_syscall+0x0/0x30)
<0>[000451383ms] Code: 0a000014 e1a0100d e3a00000 e3c12d7f (e5830000) 
<4>[000451392ms] ---[ end trace 610457ad83bc2421 ]---
<4>[000451397ms] [dump]: <system_error> [0xe1b2d3]

Буду признателен за любой пинок (кроме мата и оскорблений) в сторону места, где зарыта собака. PS С линкусом работал крайне мало, с компиляцией ядра практически не работал. Так что прошу сильно не бить ногами по почкам, печени и другим жизненно важным внутренним органам. Спасибо.



Последнее исправление: doko (всего исправлений: 3)

вроде бы понятно? (см исходники)

<1>[000450546ms] Unable to handle kernel NULL pointer dereference at virtual address 00000010
[00000010] *pgd=00000000

anymouze ★★
()
Ответ на: комментарий от anymouze

странно

Была бы мне понятна эта строка, я бы сюда не писал. Вроде логично. Был бы благодарен за пару написанных лишних предложений.

doko
() автор топика
Ответ на: странно от doko

Опции сборки ядра должны совпадать, в частности preempt и кроме того, ты не знаешь, каких ещё патчей наваял на свое поделие производитель, поэтому результат негарантирован

zgen ★★★★★
()

Что за модель роутера то?

zgen ★★★★★
()
Ответ на: странно от doko

эта ошибка легко гуглится. я выделил эти строчки не просто так. и даже указал в скобках, что нужно посмотреть. чтобы больше написать нужно исходники tun.ko смотреть — там, где-то «получается» указатель *pgd на адрес 0h (NULL pointer). Вот не знаю чем, ещё я могу Вам помочь...

anymouze ★★
()

Huawei предоставляет нерабочие исходники, в реальной прошивке другая структура sk_buff.
Помимо конфигурационных опций сборки ядра, у Huawei есть опции платформы (конкретной модели). Смещения буфера сетевых пакетов skbuf зависит от CONFIG_ATP_*, MBB_CTF_COMMON, MBB_FEATURE_FASTIP.

https://4pda.ru/forum/index.php?act=findpost&pid=77771874&anchor=Spoi...

Готовый модуль: https://my.mixtape.moe/fnargv.zip
Должен подойти к любым устройствам на Balong V7R11 с современной прошивкой.

Вообще, не рекомендую маршрутизаторы Huawei: https://habr.com/post/431016/#comment_19418742

ValdikSS ★★★★★
()
Последнее исправление: ValdikSS (всего исправлений: 1)

Скорее всего в оригинальном ядре под этот роутер в структуру sk_buff добавили дополнительные поля. Я как-то напарывался на подобную проблему с хуавеевским LTE-модемом.

Надо либо искать исходники ядра для твоего роутера или другого на похожем чипе, либо расковыривать дизассемблером имеющееся скомпилированное ядро и пытаться понять, что и куда там добавили. Второй способ сильно сложнее первого.

Deleted
()
Ответ на: комментарий от ValdikSS

Опа

Благодарствую добрый человек. tun0 открылся без вылета. Завтра попробую доковырять и проверить. Также спасибо за обзор подводных камушков (булыжников?) huawei.

Всем кто откликнулся, да еще так оперативно - спасибо. Надеюсь, что не придется вернуться в тему с продолжением этой проблемы.

PS Очень рад, что не нашлось «учителей»-снобов... такое часто бывает и если честно, готовился выслушивать напыщенные нравоучения через губу. После 5 дней эпопеи с tun`ом, уже был готов ко всему.. но народ приятно удивил. Всем удачи, друзья!

doko
() автор топика
Ответ на: Опа от doko

=(

Радость оказалась не долгой. fnargv.zip (tun.ko) открывается. Роуты настраиваются. Любой пакет в сеть через интерфейс tun0 приводит к перезагрузке железа.

<6>[000442266ms] tun: Universal TUN/TAP device driver, 1.6
<6>[000442266ms] tun: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
<7>[000514569ms] yaffs:  ecc scan thread fn end 
<0>[000615555ms] softtimer event: id=15, code=0, len=4, data=2
<4>[000615576ms] device_event_send: queue is NOT empty
<1>[000615576ms] device_event_send: msg send over
<0>[001158351ms] Internal error: Oops - undefined instruction: 0 [#1] PREEMPT ARM
<4>[001158358ms] Modules linked in: tun dhd(O) ctf(PO)
<4>[001158362ms] CPU: 0    Tainted: P           O  (3.4.5 #1)
<4>[001158367ms] PC is at 0x8c4fc
<4>[001158370ms] LR is at skb_release_head_state+0x5c/0xfc
<4>[001158375ms] pc : [<0008c4fc>]    lr : [<c04618c4>]    psr: a0000013
<4>[001158375ms] sp : c1169d58  ip : 00000000  fp : 00000001
<4>[001158386ms] r10: 00000000  r9 : c07ab3ec  r8 : c27b8000
<4>[001158391ms] r7 : c07ab41c  r6 : 3ffa273c  r5 : ffc04618  r4 : c28a0480
<4>[001158398ms] r3 : 0008c4c0  r2 : 00000000  r1 : 00000101  r0 : c0000000
<4>[001158404ms] Flags: NzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
<4>[001158411ms] Control: 18c53c7d  Table: 55e0c059  DAC: 00000015
<4>[001158417ms] 
.......................
<4>[001159084ms] [<c04618c4>] (skb_release_head_state+0x5c/0xfc) from [<c0461754>] (__kfree_skb+0x18/0xd8)
<4>[001159093ms] [<c0461754>] (__kfree_skb+0x18/0xd8) from [<c046d974>] (__netif_receive_skb+0x35c/0x3b0)
<4>[001159102ms] [<c046d974>] (__netif_receive_skb+0x35c/0x3b0) from [<c046da48>] (process_backlog+0x80/0x124)
<4>[001159112ms] [<c046da48>] (process_backlog+0x80/0x124) from [<c046de90>] (net_rx_action+0xb4/0x160)
<4>[001159121ms] [<c046de90>] (net_rx_action+0xb4/0x160) from [<c0029260>] (__do_softirq+0xa4/0x168)
<4>[001159129ms] [<c0029260>] (__do_softirq+0xa4/0x168) from [<c00294e8>] (do_softirq+0x54/0x64)
<4>[001159137ms] [<c00294e8>] (do_softirq+0x54/0x64) from [<c046b684>] (netif_rx_ni+0x60/0x7c)
<4>[001159146ms] [<c046b684>] (netif_rx_ni+0x60/0x7c) from [<bf044948>] (tun_get_user+0x2c8/0x410 [tun])
<4>[001159154ms] [<bf044948>] (tun_get_user+0x2c8/0x410 [tun]) from [<bf044b18>] (tun_chr_aio_write+0x64/0x78 [tun])
<4>[001159164ms] [<bf044b18>] (tun_chr_aio_write+0x64/0x78 [tun]) from [<c00b5068>] (do_sync_write+0xa8/0xe8)
<4>[001159174ms] [<c00b5068>] (do_sync_write+0xa8/0xe8) from [<c00b59fc>] (vfs_write+0xa8/0x138)
<4>[001159182ms] [<c00b59fc>] (vfs_write+0xa8/0x138) from [<c00b5c64>] (sys_write+0x3c/0x68)
<4>[001159190ms] [<c00b5c64>] (sys_write+0x3c/0x68) from [<c0011040>] (ret_fast_syscall+0x0/0x30)
<0>[001159198ms] Code: 63656e6e 6e6f6974 6a657220 65746365 (2d2d2064) 
<4>[001159204ms] ---[ end trace 21c77587cbaa3b1d ]---
<4>[001159209ms] [dump]: <system_error> [0x2439aca]

doko
() автор топика
8 января 2019 г.
Ответ на: Balong от doko

Этот модуль только к V7R11 подойдет.

ValdikSS ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.