repoline的问题:insmod一个简单ko,出现错误

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
ddk3000
帖子: 22
注册时间: 2014-10-16 15:11
系统: Ubuntu

repoline的问题:insmod一个简单ko,出现错误

#1

帖子 ddk3000 » 2018-04-11 15:54

Ubuntu 16.04.2 (64位)内核4.4.0-116-generic
制作一个最简单的hello.ko,执行insmod hello.ko时出错,日志显示错误是:
version magic '4.4.0-116-generic SMP mod_unload modversions'
should be '4.4.0-116-generic SMP mod_unload modversions retpoline'


Ubuntu说retpoline是为了解决安全问题引入的编译选项,貌似需要用支持retpoline选项的编译器(gcc 7.3)重新编译软件:
https://wiki.ubuntu.com/SecurityTeam/Kn ... ndMeltdown
https://wiki.ubuntu.com/SecurityTeam/Kn ... #Retpoline
https://lwn.net/Articles/745385/

我安装了gcc-7,可是7.2版本。
我也不清楚如何编译ko,使之支持retpoline,能运行在此内核中。

有人知道吗?
ddk3000
帖子: 22
注册时间: 2014-10-16 15:11
系统: Ubuntu

Re: repoline的问题:insmod一个简单ko,出现错误

#2

帖子 ddk3000 » 2018-04-13 16:15

目前已知这三个内核都有这个问题:
3.13.0-143-generic
4.4.0-116-generic
4.4.0-119-generic

如何解决?
poloshiao
论坛版主
帖子: 18279
注册时间: 2009-08-04 16:33

Re: repoline的问题:insmod一个简单ko,出现错误

#3

帖子 poloshiao » 2018-04-13 19:02

Ubuntu 16.04.2 (64位)内核4.4.0-116-generic
貌似需要用支持retpoline选项的编译器
目前已知这三个内核都有这个问题:
3.13.0-143-generic
4.4.0-116-generic
4.4.0-119-generic
升級到 Ubuntu 18.04 / 目前預裝 内核 4.15.0-13-generic
預設 支援 retpoline

參閱
https://www.phoronix.com/scan.php?page= ... -Retpoline
Linux 4.15 has Retpoline support as of a few days ago.
ddk3000
帖子: 22
注册时间: 2014-10-16 15:11
系统: Ubuntu

Re: repoline的问题:insmod一个简单ko,出现错误

#4

帖子 ddk3000 » 2018-04-16 9:54

升級到 Ubuntu 18.04 / 目前預裝 内核 4.15.0-13-generic
預設 支援 retpoline

參閱
https://www.phoronix.com/scan.php?page= ... -Retpoline
Linux 4.15 has Retpoline support as of a few days ago.[/quote]

*********************************************************************************

我使用Ubuntu 18.04(内核4.15.0-15-generic),用modinfo查看显示如下:

ddk@ddk:/lib/modules/4.15.0-15-generic/kernel/net/x25$ modinfo x25.ko
filename: /lib/modules/4.15.0-15-generic/kernel/net/x25/x25.ko
alias: net-pf-9
license: GPL
description: The X.25 Packet Layer network layer protocol
author: Jonathan Naylor <g4klx@g4klx.demon.co.uk>
srcversion: 56421E42FEC48B08980FFFE
depends:
retpoline: Y
intree: Y
name: x25
vermagic: 4.15.0-15-generic SMP mod_unload
signat: PKCS#7
signer:
sig_key:
sig_hashalgo: md4

而在Ubuntu 16.04.2(内核4.4.0-119-generic)上,用modinfo查看显示如下:

ddk@ddk:/lib/modules/4.4.0-119-generic/kernel/net/x25$ modinfo x25.ko
filename: /lib/modules/4.4.0-119-generic/kernel/net/x25/x25.ko
alias: net-pf-9
license: GPL
description: The X.25 Packet Layer network layer protocol
author: Jonathan Naylor <g4klx@g4klx.demon.co.uk>
srcversion: 1C330644067B6F5B4EA0703
depends:
intree: Y
vermagic: 4.4.0-119-generic SMP mod_unload modversions retpoline


在 4.15.0-15-generic 上,编译和执行ko,都没有问题。
现在的问题是: 在 4.4.0-119-generic上,因为vermagic多了retpoline,导致编译后的ko无法执行。这个怎么解决?
ddk3000
帖子: 22
注册时间: 2014-10-16 15:11
系统: Ubuntu

Re: repoline的问题:insmod一个简单ko,出现错误

#5

帖子 ddk3000 » 2018-04-23 15:48

找到了一种解决方法:https://bugs.launchpad.net/ubuntu/+sour ... ug/1756506

修改头文件,增加 RETPOLINE 定义:
echo "#define RETPOLINE 1" >> /usr/src/linux-headers-3.13.0-143-generic/include/generated/utsrelease.h

编译内核模块ko,执行insmod成功。
tianjincheng
帖子: 1
注册时间: 2020-11-12 16:31
系统: ubuntu14.04

Re: repoline的问题:insmod一个简单ko,出现错误

#6

帖子 tianjincheng » 2020-11-12 16:33

在路径/usr/src/linux-headers-4.4.0-142-generic/include/generated$
编辑utsrelease.h
加入一个宏定义 #define RETPOLINE 1
完美解决
回复