Hi all, The livepatch selftest somehow fails in -next on s390 due to what appears to me as 'comm' usage issue. E.g the removal of timestamp- less line "with link type OSD_10GIG." in the below output forces 'comm' to produce the correct result in check_result() function of tools/testing/selftests/livepatch/functions.sh script: [ 11.229256] qeth 0.0.bd02: qdio: OSA on SC 2624 using AI:1 QEBSM:0 PRI:1 TDD:1 SIGA: W [ 11.250189] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.258763] qeth 0.0.bd00: Device is a OSD Express card (level: 0165) with link type OSD_10GIG. [ 11.259261] qeth 0.0.bd00: The device represents a Bridge Capable Port [ 11.262376] qeth 0.0.bd00: MAC address b2:96:9c:49:aa:e9 successfully registered [ 11.269654] qeth 0.0.bd00: MAC address 06:c6:b5:7d:ee:63 successfully registered By contrast, using the 'diff' instead works as a charm. But it was removed with commit 2f3f651f3756 ("selftests/livepatch: Use "comm" instead of "diff" for dmesg"). I am attaching the contents of "$expect" and "$result" script variables and the output of 'dmesg' before and after test run dmesg-saved.txt and dmesg.txt. Another 'dmesg' output dmesg-saved1.txt and dmesg1.txt also shows the same problem, which seems like something to do with sorting. The minimal reproducer attached is dmesg-saved1-rep.txt and dmesg1-rep.txt, that could be described as: --- dmesg-saved1-rep.txt 2023-12-17 21:08:14.171014218 +0100 +++ dmesg1-rep.txt 2023-12-17 21:06:52.221014218 +0100 @@ -1,3 +1,3 @@ -[ 98.820331] livepatch: 'test_klp_state2': starting patching transition [ 100.031067] livepatch: 'test_klp_state2': completing patching transition [ 284.224335] livepatch: kernel.ftrace_enabled = 1 +[ 284.232921] ===== TEST: basic shadow variable API ===== The culprit is the extra space in [ 98.820331] timestamp, that from the script point of view produces the output with two extra lines: [ 100.031067] livepatch: 'test_klp_state2': completing patching transition [ 284.224335] livepatch: kernel.ftrace_enabled = 1 [ 284.232921] ===== TEST: basic shadow variable API ===== If the line with [ 98.820331] timestamp removed or changed to e.g [ 100.031066] (aka 1 us less), then the result output is as expected: [ 284.232921] ===== TEST: basic shadow variable API ===== Thanks!
[ 11.189483] systemd-journald[943]: varlink-22: Changing state processed-method → idle-server [ 11.190633] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.190705] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.191385] systemd-journald[943]: varlink-22: Got POLLHUP from socket. [ 11.191389] systemd-journald[943]: varlink-22: Changing state idle-server → pending-disconnect [ 11.191392] systemd-journald[943]: varlink-22: Changing state pending-disconnect → processing-disconnect [ 11.191395] systemd-journald[943]: varlink-22: Changing state processing-disconnect → disconnected [ 11.200993] VFIO - User Level meta-driver version: 0.3 [ 11.224375] qeth 0.0.bd00: CHID: 1a0 CHPID: 98 [ 11.229256] qeth 0.0.bd02: qdio: OSA on SC 2624 using AI:1 QEBSM:0 PRI:1 TDD:1 SIGA: W [ 11.250189] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.258763] qeth 0.0.bd00: Device is a OSD Express card (level: 0165) with link type OSD_10GIG. [ 11.259261] qeth 0.0.bd00: The device represents a Bridge Capable Port [ 11.262376] qeth 0.0.bd00: MAC address b2:96:9c:49:aa:e9 successfully registered [ 11.269654] qeth 0.0.bd00: MAC address 06:c6:b5:7d:ee:63 successfully registered [ 11.272060] qeth 0.0.bd00 encbd00: renamed from eth0 [ 11.310918] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.323102] dasdconf.sh Warning: 0.0.627c is already online, not configuring [ 11.343058] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.347561] zram0: detected capacity change from 0 to 16777216 [ 11.359549] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.377984] Adding 8388604k swap on /dev/zram0. Priority:100 extents:1 across:8388604k SSDsc [ 11.381599] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.390605] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.397956] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.552967] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.569530] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.575683] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.605458] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.611661] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.615960] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.714654] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.716630] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.743224] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.745027] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.746763] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.751180] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.752995] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 11.920342] dasd-eckd 0.0.627f: A channel path to the device has become operational [ 11.920856] dasd-eckd 0.0.627f: A channel path to the device has become operational [ 11.928668] dasd-eckd 0.0.627f: New DASD 3390/0C (CU 3990/04) with 30051 cylinders, 15 heads, 224 sectors [ 11.941252] zfcp 0.0.1900: qdio: ZFCP on SC 61 using AI:1 QEBSM:0 PRI:1 TDD:1 SIGA: W [ 11.948281] dasd-eckd 0.0.627f: DASD with 4 KB/block, 21636720 KB total size, 48 KB/track, compatible disk layout [ 11.949271] dasdb:VOL1/ 0X627F: dasdb1 dasdb2 [ 11.970413] scsi host0: scsi_eh_0: sleeping [ 11.970560] scsi host0: zfcp [ 12.028341] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 12.032979] zfcp 0.0.1900: FC Endpoint Security of connection to remote port 0x500507630910d435 enabled: Encryption [ 12.035107] scsi 0:0:0:0: scsi scan: INQUIRY pass 1 length 36 [ 12.035239] scsi 0:0:0:0: scsi scan: INQUIRY successful with code 0x0 [ 12.035246] scsi 0:0:0:0: scsi scan: INQUIRY pass 2 length 164 [ 12.035345] scsi 0:0:0:0: scsi scan: INQUIRY successful with code 0x0 [ 12.035350] scsi 0:0:0:0: scsi scan: peripheral device type of 31, no device added [ 12.035679] scsi 0:0:0:0: scsi scan: Sending REPORT LUNS to (try 0) [ 12.036992] scsi 0:0:0:0: scsi scan: REPORT LUNS successful (try 0) result 0x0 [ 12.036994] scsi 0:0:0:0: scsi scan: REPORT LUN scan [ 12.037241] scsi 0:0:0:1084113024: scsi scan: INQUIRY pass 1 length 36 [ 12.037394] scsi 0:0:0:1084113024: scsi scan: INQUIRY successful with code 0x0 [ 12.037399] scsi 0:0:0:1084113024: scsi scan: INQUIRY pass 2 length 164 [ 12.037496] scsi 0:0:0:1084113024: scsi scan: INQUIRY successful with code 0x0 [ 12.037502] scsi 0:0:0:1084113024: Direct-Access IBM 2107900 .102 PQ: 0 ANSI: 6 [ 12.038919] scsi 0:0:0:1084113024: alua: supports implicit TPGS [ 12.038922] scsi 0:0:0:1084113024: alua: device naa.6005076309ffd435000000000000809e port group 0 rel port 203 [ 12.038952] sd 0:0:0:1084113024: sg_alloc: dev=0 [ 12.038982] sd 0:0:0:1084113024: Attached scsi generic sg0 type 0 [ 12.039272] scsi 0:0:0:1084178560: scsi scan: INQUIRY pass 1 length 36 [ 12.039319] sd 0:0:0:1084113024: Power-on or device reset occurred [ 12.039325] sd 0:0:0:1084113024: [sda] tag#640 Done: ADD_TO_MLQUEUE Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.039328] sd 0:0:0:1084113024: [sda] tag#640 CDB: Test Unit Ready 00 00 00 00 00 00 [ 12.039330] sd 0:0:0:1084113024: [sda] tag#640 Sense Key : Unit Attention [current] [ 12.039333] sd 0:0:0:1084113024: [sda] tag#640 Add. Sense: Power on, reset, or bus device reset occurred [ 12.039384] scsi 0:0:0:1084178560: scsi scan: INQUIRY successful with code 0x0 [ 12.039404] scsi 0:0:0:1084178560: scsi scan: INQUIRY pass 2 length 164 [ 12.039505] scsi 0:0:0:1084178560: scsi scan: INQUIRY successful with code 0x0 [ 12.039510] scsi 0:0:0:1084178560: Direct-Access IBM 2107900 .102 PQ: 0 ANSI: 6 [ 12.040890] scsi 0:0:0:1084178560: alua: supports implicit TPGS [ 12.040892] scsi 0:0:0:1084178560: alua: device naa.6005076309ffd435000000000000809f port group 0 rel port 203 [ 12.040956] sd 0:0:0:1084178560: sg_alloc: dev=1 [ 12.040983] sd 0:0:0:1084178560: Attached scsi generic sg1 type 0 [ 12.041244] scsi 0:0:0:1084113025: scsi scan: INQUIRY pass 1 length 36 [ 12.041362] sd 0:0:0:1084178560: Power-on or device reset occurred [ 12.041367] sd 0:0:0:1084178560: [sdb] tag#3264 Done: ADD_TO_MLQUEUE Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.041369] sd 0:0:0:1084178560: [sdb] tag#3264 CDB: Test Unit Ready 00 00 00 00 00 00 [ 12.041371] sd 0:0:0:1084178560: [sdb] tag#3264 Sense Key : Unit Attention [current] [ 12.041373] sd 0:0:0:1084178560: [sdb] tag#3264 Add. Sense: Power on, reset, or bus device reset occurred [ 12.041405] scsi 0:0:0:1084113025: scsi scan: INQUIRY successful with code 0x0 [ 12.041410] scsi 0:0:0:1084113025: scsi scan: INQUIRY pass 2 length 164 [ 12.041580] scsi 0:0:0:1084113025: scsi scan: INQUIRY successful with code 0x0 [ 12.041585] scsi 0:0:0:1084113025: Direct-Access IBM 2107900 .102 PQ: 0 ANSI: 6 [ 12.042960] scsi 0:0:0:1084113025: alua: supports implicit TPGS [ 12.042962] scsi 0:0:0:1084113025: alua: device naa.6005076309ffd435000000000000819e port group 0 rel port 203 [ 12.043005] sd 0:0:0:1084113025: sg_alloc: dev=2 [ 12.043063] sd 0:0:0:1084113025: Attached scsi generic sg2 type 0 [ 12.043298] scsi 0:0:0:1084178561: scsi scan: INQUIRY pass 1 length 36 [ 12.043309] sd 0:0:0:1084113025: Power-on or device reset occurred [ 12.043312] sd 0:0:0:1084113025: [sdc] tag#641 Done: ADD_TO_MLQUEUE Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.043314] sd 0:0:0:1084113025: [sdc] tag#641 CDB: Test Unit Ready 00 00 00 00 00 00 [ 12.043316] sd 0:0:0:1084113025: [sdc] tag#641 Sense Key : Unit Attention [current] [ 12.043317] sd 0:0:0:1084113025: [sdc] tag#641 Add. Sense: Power on, reset, or bus device reset occurred [ 12.043423] scsi 0:0:0:1084178561: scsi scan: INQUIRY successful with code 0x0 [ 12.043428] scsi 0:0:0:1084178561: scsi scan: INQUIRY pass 2 length 164 [ 12.043531] scsi 0:0:0:1084178561: scsi scan: INQUIRY successful with code 0x0 [ 12.043536] scsi 0:0:0:1084178561: Direct-Access IBM 2107900 .102 PQ: 0 ANSI: 6 [ 12.044875] scsi 0:0:0:1084178561: alua: supports implicit TPGS [ 12.044877] scsi 0:0:0:1084178561: alua: device naa.6005076309ffd435000000000000819f port group 0 rel port 203 [ 12.044927] scsi 0:0:0:1084178561: sg_alloc: dev=3 [ 12.044950] scsi 0:0:0:1084178561: Attached scsi generic sg3 type 0 [ 12.045107] sd 0:0:0:1084113024: scsi scan: device exists on 0:0:0:1084113024 [ 12.045243] sd 0:0:0:1084178561: Power-on or device reset occurred [ 12.045244] sd 0:0:0:1084178560: scsi scan: device exists on 0:0:0:1084178560 [ 12.045247] sd 0:0:0:1084178561: [sdd] tag#3265 Done: ADD_TO_MLQUEUE Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.045250] sd 0:0:0:1084178561: [sdd] tag#3265 CDB: Test Unit Ready 00 00 00 00 00 00 [ 12.045252] sd 0:0:0:1084178561: [sdd] tag#3265 Sense Key : Unit Attention [current] [ 12.045254] sd 0:0:0:1084178561: [sdd] tag#3265 Add. Sense: Power on, reset, or bus device reset occurred [ 12.045305] sd 0:0:0:1084113025: scsi scan: device exists on 0:0:0:1084113025 [ 12.045373] sd 0:0:0:1084178561: scsi scan: device exists on 0:0:0:1084178561 [ 12.050288] sd 0:0:0:1084113024: [sda] 41943040 512-byte logical blocks: (21.5 GB/20.0 GiB) [ 12.050294] sd 0:0:0:1084113024: alua: transition timeout set to 60 seconds [ 12.050309] sd 0:0:0:1084113024: alua: port group 00 state A preferred supports tolusnA [ 12.050393] sd 0:0:0:1084113024: [sda] Write Protect is off [ 12.050395] sd 0:0:0:1084113024: [sda] Mode Sense: ed 00 00 08 [ 12.050571] sd 0:0:0:1084113024: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 12.050678] sd 0:0:0:1084113024: [sda] tag#648 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.050680] sd 0:0:0:1084113024: [sda] tag#648 CDB: Report supported operation codes a3 0c 01 12 00 00 00 00 00 0a 00 00 [ 12.050682] sd 0:0:0:1084113024: [sda] tag#648 Sense Key : Illegal Request [current] [ 12.050684] sd 0:0:0:1084113024: [sda] tag#648 Add. Sense: Invalid field in cdb [ 12.052828] sd 0:0:0:1084113024: [sda] tag#651 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.052830] sd 0:0:0:1084113024: [sda] tag#651 CDB: Inquiry 12 01 b9 00 04 00 [ 12.052832] sd 0:0:0:1084113024: [sda] tag#651 Sense Key : Illegal Request [current] [ 12.052833] sd 0:0:0:1084113024: [sda] tag#651 Add. Sense: Invalid field in cdb [ 12.054252] sda: sda1 [ 12.059079] sd 0:0:0:1084113024: [sda] Attached SCSI disk [ 12.060240] sd 0:0:0:1084113025: [sdc] 41943040 512-byte logical blocks: (21.5 GB/20.0 GiB) [ 12.060242] sd 0:0:0:1084178561: [sdd] 41943040 512-byte logical blocks: (21.5 GB/20.0 GiB) [ 12.060287] sd 0:0:0:1084178561: alua: transition timeout set to 60 seconds [ 12.060290] sd 0:0:0:1084178561: alua: port group 00 state A preferred supports tolusnA [ 12.060294] sd 0:0:0:1084113025: alua: transition timeout set to 60 seconds [ 12.060295] sd 0:0:0:1084178560: [sdb] 41943040 512-byte logical blocks: (21.5 GB/20.0 GiB) [ 12.060296] sd 0:0:0:1084113025: alua: port group 00 state A preferred supports tolusnA [ 12.060330] sd 0:0:0:1084178560: alua: transition timeout set to 60 seconds [ 12.060334] sd 0:0:0:1084113025: [sdc] Write Protect is off [ 12.060334] sd 0:0:0:1084178560: alua: port group 00 state A preferred supports tolusnA [ 12.060336] sd 0:0:0:1084178561: [sdd] Write Protect is off [ 12.060336] sd 0:0:0:1084113025: [sdc] Mode Sense: ed 00 00 08 [ 12.060339] sd 0:0:0:1084178561: [sdd] Mode Sense: ed 00 00 08 [ 12.060397] sd 0:0:0:1084178560: [sdb] Write Protect is off [ 12.060398] sd 0:0:0:1084178560: [sdb] Mode Sense: ed 00 00 08 [ 12.060544] sd 0:0:0:1084113025: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 12.060544] sd 0:0:0:1084178561: [sdd] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 12.060588] sd 0:0:0:1084178560: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 12.060692] sd 0:0:0:1084178560: [sdb] tag#1226 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.060695] sd 0:0:0:1084178560: [sdb] tag#1226 CDB: Report supported operation codes a3 0c 01 12 00 00 00 00 00 0a 00 00 [ 12.060697] sd 0:0:0:1084178560: [sdb] tag#1226 Sense Key : Illegal Request [current] [ 12.060699] sd 0:0:0:1084178560: [sdb] tag#1226 Add. Sense: Invalid field in cdb [ 12.060784] sd 0:0:0:1084178561: [sdd] tag#1227 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.060786] sd 0:0:0:1084178561: [sdd] tag#1227 CDB: Report supported operation codes a3 0c 01 12 00 00 00 00 00 0a 00 00 [ 12.060788] sd 0:0:0:1084178561: [sdd] tag#1227 Sense Key : Illegal Request [current] [ 12.060790] sd 0:0:0:1084178561: [sdd] tag#1227 Add. Sense: Invalid field in cdb [ 12.060797] sd 0:0:0:1084113025: [sdc] tag#672 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.060816] sd 0:0:0:1084178561: [sdd] Disabling DIF Type 1 protection [ 12.060817] sd 0:0:0:1084113025: [sdc] tag#672 CDB: Report supported operation codes a3 0c 01 12 00 00 00 00 00 0a 00 00 [ 12.060818] sd 0:0:0:1084178561: [sdd] Enabling DIF Type 0 protection [ 12.060820] sd 0:0:0:1084113025: [sdc] tag#672 Sense Key : Illegal Request [current] [ 12.060823] sd 0:0:0:1084113025: [sdc] tag#672 Add. Sense: Invalid field in cdb [ 12.060828] sd 0:0:0:1084113025: [sdc] Disabling DIF Type 1 protection [ 12.060830] sd 0:0:0:1084113025: [sdc] Enabling DIF Type 0 protection [ 12.063360] sd 0:0:0:1084178561: [sdd] tag#3274 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.063363] sd 0:0:0:1084178561: [sdd] tag#3274 CDB: Inquiry 12 01 b9 00 04 00 [ 12.063364] sd 0:0:0:1084178561: [sdd] tag#3274 Sense Key : Illegal Request [current] [ 12.063367] sd 0:0:0:1084178561: [sdd] tag#3274 Add. Sense: Invalid field in cdb [ 12.063825] sd 0:0:0:1084113025: [sdc] tag#675 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.063827] sd 0:0:0:1084113025: [sdc] tag#675 CDB: Inquiry 12 01 b9 00 04 00 [ 12.063829] sd 0:0:0:1084113025: [sdc] tag#675 Sense Key : Illegal Request [current] [ 12.063830] sd 0:0:0:1084113025: [sdc] tag#675 Add. Sense: Invalid field in cdb [ 12.063837] sd 0:0:0:1084178560: [sdb] tag#1230 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.063839] sd 0:0:0:1084178560: [sdb] tag#1230 CDB: Inquiry 12 01 b9 00 04 00 [ 12.063841] sd 0:0:0:1084178560: [sdb] tag#1230 Sense Key : Illegal Request [current] [ 12.063843] sd 0:0:0:1084178560: [sdb] tag#1230 Add. Sense: Invalid field in cdb [ 12.063920] sd 0:0:0:1084178561: [sdd] Attached SCSI disk [ 12.064305] sd 0:0:0:1084178560: [sdb] Attached SCSI disk [ 12.064457] sd 0:0:0:1084113025: [sdc] Attached SCSI disk [ 12.118155] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 12.173553] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 12.213521] device-mapper: multipath service-time: version 0.3.0 loaded [ 12.320946] zfcp 0.0.1940: qdio: ZFCP on SC 62 using AI:1 QEBSM:0 PRI:1 TDD:1 SIGA: W [ 12.350368] scsi host1: scsi_eh_1: sleeping [ 12.350411] scsi host1: zfcp [ 12.415631] zfcp 0.0.1940: FC Endpoint Security of connection to remote port 0x500507630914d435 enabled: Encryption [ 12.417541] scsi 1:0:0:0: scsi scan: INQUIRY pass 1 length 36 [ 12.417634] scsi 1:0:0:0: scsi scan: INQUIRY successful with code 0x0 [ 12.417658] scsi 1:0:0:0: scsi scan: INQUIRY pass 2 length 164 [ 12.417749] scsi 1:0:0:0: scsi scan: INQUIRY successful with code 0x0 [ 12.417755] scsi 1:0:0:0: scsi scan: peripheral device type of 31, no device added [ 12.418087] scsi 1:0:0:0: scsi scan: Sending REPORT LUNS to (try 0) [ 12.418541] scsi 1:0:0:0: scsi scan: REPORT LUNS successful (try 0) result 0x0 [ 12.418543] scsi 1:0:0:0: scsi scan: REPORT LUN scan [ 12.418789] scsi 1:0:0:1084113024: scsi scan: INQUIRY pass 1 length 36 [ 12.418903] scsi 1:0:0:1084113024: scsi scan: INQUIRY successful with code 0x0 [ 12.418908] scsi 1:0:0:1084113024: scsi scan: INQUIRY pass 2 length 164 [ 12.419005] scsi 1:0:0:1084113024: scsi scan: INQUIRY successful with code 0x0 [ 12.419010] scsi 1:0:0:1084113024: Direct-Access IBM 2107900 .102 PQ: 0 ANSI: 6 [ 12.420462] scsi 1:0:0:1084113024: alua: supports implicit TPGS [ 12.420466] scsi 1:0:0:1084113024: alua: device naa.6005076309ffd435000000000000809e port group 0 rel port 243 [ 12.420514] sd 1:0:0:1084113024: sg_alloc: dev=4 [ 12.420566] sd 1:0:0:1084113024: Attached scsi generic sg4 type 0 [ 12.420859] scsi 1:0:0:1084178560: scsi scan: INQUIRY pass 1 length 36 [ 12.420863] sd 1:0:0:1084113024: Power-on or device reset occurred [ 12.420867] sd 1:0:0:1084113024: [sde] tag#1664 Done: ADD_TO_MLQUEUE Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.420870] sd 1:0:0:1084113024: [sde] tag#1664 CDB: Test Unit Ready 00 00 00 00 00 00 [ 12.420872] sd 1:0:0:1084113024: [sde] tag#1664 Sense Key : Unit Attention [current] [ 12.420874] sd 1:0:0:1084113024: [sde] tag#1664 Add. Sense: Power on, reset, or bus device reset occurred [ 12.420971] scsi 1:0:0:1084178560: scsi scan: INQUIRY successful with code 0x0 [ 12.420976] scsi 1:0:0:1084178560: scsi scan: INQUIRY pass 2 length 164 [ 12.421074] scsi 1:0:0:1084178560: scsi scan: INQUIRY successful with code 0x0 [ 12.421079] scsi 1:0:0:1084178560: Direct-Access IBM 2107900 .102 PQ: 0 ANSI: 6 [ 12.422435] scsi 1:0:0:1084178560: alua: supports implicit TPGS [ 12.422438] scsi 1:0:0:1084178560: alua: device naa.6005076309ffd435000000000000809f port group 0 rel port 243 [ 12.422481] sd 1:0:0:1084178560: sg_alloc: dev=5 [ 12.422513] sd 1:0:0:1084178560: Attached scsi generic sg5 type 0 [ 12.422818] scsi 1:0:0:1084113025: scsi scan: INQUIRY pass 1 length 36 [ 12.422918] scsi 1:0:0:1084113025: scsi scan: INQUIRY successful with code 0x0 [ 12.422923] scsi 1:0:0:1084113025: scsi scan: INQUIRY pass 2 length 164 [ 12.423017] scsi 1:0:0:1084113025: scsi scan: INQUIRY successful with code 0x0 [ 12.423022] scsi 1:0:0:1084113025: Direct-Access IBM 2107900 .102 PQ: 0 ANSI: 6 [ 12.423169] sd 1:0:0:1084178560: Power-on or device reset occurred [ 12.423173] sd 1:0:0:1084178560: [sdf] tag#896 Done: ADD_TO_MLQUEUE Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.423175] sd 1:0:0:1084178560: [sdf] tag#896 CDB: Test Unit Ready 00 00 00 00 00 00 [ 12.423176] sd 1:0:0:1084178560: [sdf] tag#896 Sense Key : Unit Attention [current] [ 12.423178] sd 1:0:0:1084178560: [sdf] tag#896 Add. Sense: Power on, reset, or bus device reset occurred [ 12.424628] scsi 1:0:0:1084113025: alua: supports implicit TPGS [ 12.424630] scsi 1:0:0:1084113025: alua: device naa.6005076309ffd435000000000000819e port group 0 rel port 243 [ 12.424675] sd 1:0:0:1084113025: sg_alloc: dev=6 [ 12.424746] sd 1:0:0:1084113025: Attached scsi generic sg6 type 0 [ 12.425035] scsi 1:0:0:1084178561: scsi scan: INQUIRY pass 1 length 36 [ 12.425136] scsi 1:0:0:1084178561: scsi scan: INQUIRY successful with code 0x0 [ 12.425141] scsi 1:0:0:1084178561: scsi scan: INQUIRY pass 2 length 164 [ 12.425154] sd 1:0:0:1084113025: Power-on or device reset occurred [ 12.425157] sd 1:0:0:1084113025: [sdg] tag#1665 Done: ADD_TO_MLQUEUE Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.425159] sd 1:0:0:1084113025: [sdg] tag#1665 CDB: Test Unit Ready 00 00 00 00 00 00 [ 12.425161] sd 1:0:0:1084113025: [sdg] tag#1665 Sense Key : Unit Attention [current] [ 12.425163] sd 1:0:0:1084113025: [sdg] tag#1665 Add. Sense: Power on, reset, or bus device reset occurred [ 12.425233] scsi 1:0:0:1084178561: scsi scan: INQUIRY successful with code 0x0 [ 12.425238] scsi 1:0:0:1084178561: Direct-Access IBM 2107900 .102 PQ: 0 ANSI: 6 [ 12.426688] scsi 1:0:0:1084178561: alua: supports implicit TPGS [ 12.426691] scsi 1:0:0:1084178561: alua: device naa.6005076309ffd435000000000000819f port group 0 rel port 243 [ 12.426934] sd 1:0:0:1084178561: sg_alloc: dev=7 [ 12.427059] sd 1:0:0:1084178561: Attached scsi generic sg7 type 0 [ 12.427341] sd 1:0:0:1084113024: scsi scan: device exists on 1:0:0:1084113024 [ 12.427411] sd 1:0:0:1084178561: Power-on or device reset occurred [ 12.427414] sd 1:0:0:1084178561: [sdh] tag#897 Done: ADD_TO_MLQUEUE Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.427417] sd 1:0:0:1084178561: [sdh] tag#897 CDB: Test Unit Ready 00 00 00 00 00 00 [ 12.427419] sd 1:0:0:1084178561: [sdh] tag#897 Sense Key : Unit Attention [current] [ 12.427422] sd 1:0:0:1084178561: [sdh] tag#897 Add. Sense: Power on, reset, or bus device reset occurred [ 12.427766] sd 1:0:0:1084178560: scsi scan: device exists on 1:0:0:1084178560 [ 12.428386] sd 1:0:0:1084113025: scsi scan: device exists on 1:0:0:1084113025 [ 12.428806] sd 1:0:0:1084178561: scsi scan: device exists on 1:0:0:1084178561 [ 12.440305] sd 1:0:0:1084113025: [sdg] 41943040 512-byte logical blocks: (21.5 GB/20.0 GiB) [ 12.440309] sd 1:0:0:1084113024: [sde] 41943040 512-byte logical blocks: (21.5 GB/20.0 GiB) [ 12.440328] sd 1:0:0:1084178561: [sdh] 41943040 512-byte logical blocks: (21.5 GB/20.0 GiB) [ 12.440365] sd 1:0:0:1084178560: [sdf] 41943040 512-byte logical blocks: (21.5 GB/20.0 GiB) [ 12.440405] sd 1:0:0:1084113025: [sdg] Write Protect is off [ 12.440406] sd 1:0:0:1084113025: [sdg] Mode Sense: ed 00 00 08 [ 12.440408] sd 1:0:0:1084113024: [sde] Write Protect is off [ 12.440410] sd 1:0:0:1084113024: [sde] Mode Sense: ed 00 00 08 [ 12.440426] sd 1:0:0:1084178561: [sdh] Write Protect is off [ 12.440428] sd 1:0:0:1084178561: [sdh] Mode Sense: ed 00 00 08 [ 12.440451] sd 1:0:0:1084178560: [sdf] Write Protect is off [ 12.440453] sd 1:0:0:1084178560: [sdf] Mode Sense: ed 00 00 08 [ 12.440613] sd 1:0:0:1084113025: [sdg] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 12.440615] sd 1:0:0:1084113024: [sde] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 12.440625] sd 1:0:0:1084178561: [sdh] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 12.440627] sd 1:0:0:1084178560: [sdf] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 12.440709] sd 1:0:0:1084113024: [sde] tag#2055 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.440712] sd 1:0:0:1084113024: [sde] tag#2055 CDB: Report supported operation codes a3 0c 01 12 00 00 00 00 00 0a 00 00 [ 12.440714] sd 1:0:0:1084113024: [sde] tag#2055 Sense Key : Illegal Request [current] [ 12.440716] sd 1:0:0:1084113024: [sde] tag#2055 Add. Sense: Invalid field in cdb [ 12.440722] sd 1:0:0:1084178560: [sdf] tag#906 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.440724] sd 1:0:0:1084178560: [sdf] tag#906 CDB: Report supported operation codes a3 0c 01 12 00 00 00 00 00 0a 00 00 [ 12.440727] sd 1:0:0:1084178560: [sdf] tag#906 Sense Key : Illegal Request [current] [ 12.440729] sd 1:0:0:1084178560: [sdf] tag#906 Add. Sense: Invalid field in cdb [ 12.440826] sd 1:0:0:1084113025: [sdg] tag#1677 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.440846] sd 1:0:0:1084113025: [sdg] tag#1677 CDB: Report supported operation codes a3 0c 01 12 00 00 00 00 00 0a 00 00 [ 12.440849] sd 1:0:0:1084113025: [sdg] tag#1677 Sense Key : Illegal Request [current] [ 12.440851] sd 1:0:0:1084113025: [sdg] tag#1677 Add. Sense: Invalid field in cdb [ 12.440855] sd 1:0:0:1084113025: [sdg] Disabling DIF Type 1 protection [ 12.440857] sd 1:0:0:1084113025: [sdg] Enabling DIF Type 0 protection [ 12.440861] sd 1:0:0:1084178561: [sdh] tag#325 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.440874] sd 1:0:0:1084178561: [sdh] tag#325 CDB: Report supported operation codes a3 0c 01 12 00 00 00 00 00 0a 00 00 [ 12.440881] sd 1:0:0:1084178561: [sdh] tag#325 Sense Key : Illegal Request [current] [ 12.440882] sd 1:0:0:1084178561: [sdh] tag#325 Add. Sense: Invalid field in cdb [ 12.440886] sd 1:0:0:1084178561: [sdh] Disabling DIF Type 1 protection [ 12.440888] sd 1:0:0:1084178561: [sdh] Enabling DIF Type 0 protection [ 12.443759] sd 1:0:0:1084113024: [sde] tag#1679 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.443780] sd 1:0:0:1084113024: [sde] tag#1679 CDB: Inquiry 12 01 b9 00 04 00 [ 12.443782] sd 1:0:0:1084113024: [sde] tag#1679 Sense Key : Illegal Request [current] [ 12.443785] sd 1:0:0:1084113024: [sde] tag#1679 Add. Sense: Invalid field in cdb [ 12.443797] sd 1:0:0:1084178560: [sdf] tag#327 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.443800] sd 1:0:0:1084178560: [sdf] tag#327 CDB: Inquiry 12 01 b9 00 04 00 [ 12.443802] sd 1:0:0:1084178560: [sdf] tag#327 Sense Key : Illegal Request [current] [ 12.443805] sd 1:0:0:1084178560: [sdf] tag#327 Add. Sense: Invalid field in cdb [ 12.443902] sd 1:0:0:1084113025: [sdg] tag#1682 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.443905] sd 1:0:0:1084113025: [sdg] tag#1682 CDB: Inquiry 12 01 b9 00 04 00 [ 12.443908] sd 1:0:0:1084113025: [sdg] tag#1682 Sense Key : Illegal Request [current] [ 12.443910] sd 1:0:0:1084113025: [sdg] tag#1682 Add. Sense: Invalid field in cdb [ 12.443912] sd 1:0:0:1084178561: [sdh] tag#2057 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.443917] sd 1:0:0:1084178561: [sdh] tag#2057 CDB: Inquiry 12 01 b9 00 04 00 [ 12.443919] sd 1:0:0:1084178561: [sdh] tag#2057 Sense Key : Illegal Request [current] [ 12.443921] sd 1:0:0:1084178561: [sdh] tag#2057 Add. Sense: Invalid field in cdb [ 12.444277] sd 1:0:0:1084178560: [sdf] Attached SCSI disk [ 12.444413] sd 1:0:0:1084113025: [sdg] Attached SCSI disk [ 12.444437] sd 1:0:0:1084178561: [sdh] Attached SCSI disk [ 12.445055] sde: sde1 [ 12.445135] sd 1:0:0:1084113024: [sde] Attached SCSI disk [ 12.455157] mlx5_core 0001:00:00.0 ens8192f0np0: Link up [ 12.754503] mlx5_core 0000:00:00.0 ens8320f0np0: Link up [ 12.870161] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 12.871810] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 12.873288] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 12.879490] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 12.881609] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 12.883524] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 13.129973] systemd-journald[943]: Compressed data object 621 -> 266 using ZSTD [ 13.130596] systemd-journald[943]: Compressed data object 621 -> 274 using ZSTD [ 14.130283] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 52.526889] crw_info : CRW reports slct=0, oflw=0, chn=0, rsc=B, anc=0, erc=0, rsid=0 [ 64.832872] systemd-journald[943]: Compressed data object 533 -> 400 using ZSTD [ 64.919285] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 64.928008] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 65.045916] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 65.046557] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 65.206974] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 84.040569] livepatch: kernel.ftrace_enabled = 1 [ 84.047983] ===== TEST: basic function patching ===== [ 84.052146] % modprobe test_klp_livepatch [ 84.054139] test_klp_livepatch: tainting kernel with TAINT_LIVEPATCH [ 84.054277] livepatch: enabling patch 'test_klp_livepatch' [ 84.054279] livepatch: 'test_klp_livepatch': initializing patching transition [ 84.055514] livepatch: 'test_klp_livepatch': starting patching transition [ 84.867407] livepatch: 'test_klp_livepatch': completing patching transition [ 84.867542] livepatch: 'test_klp_livepatch': patching complete [ 84.872840] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 84.872891] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 84.872925] livepatch: 'test_klp_livepatch': starting unpatching transition [ 85.987407] livepatch: 'test_klp_livepatch': completing unpatching transition [ 85.989034] livepatch: 'test_klp_livepatch': unpatching complete [ 86.084797] % rmmod test_klp_livepatch [ 86.153886] ===== TEST: multiple livepatches ===== [ 86.157188] % modprobe test_klp_livepatch [ 86.158657] livepatch: enabling patch 'test_klp_livepatch' [ 86.158659] livepatch: 'test_klp_livepatch': initializing patching transition [ 86.159793] livepatch: 'test_klp_livepatch': starting patching transition [ 87.027437] livepatch: 'test_klp_livepatch': completing patching transition [ 87.027546] livepatch: 'test_klp_livepatch': patching complete [ 87.078385] test_klp_livepatch: this has been live patched [ 87.083290] % modprobe test_klp_atomic_replace replace=0 [ 87.085500] livepatch: enabling patch 'test_klp_atomic_replace' [ 87.085502] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 87.086685] livepatch: 'test_klp_atomic_replace': starting patching transition [ 87.907412] livepatch: 'test_klp_atomic_replace': completing patching transition [ 87.907555] livepatch: 'test_klp_atomic_replace': patching complete [ 88.004547] test_klp_livepatch: this has been live patched [ 88.005509] test_klp_atomic_replace: this has been live patched [ 88.005634] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 88.005721] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 88.005740] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 88.947422] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 88.948800] livepatch: 'test_klp_atomic_replace': unpatching complete [ 89.016537] % rmmod test_klp_atomic_replace [ 89.097952] test_klp_livepatch: this has been live patched [ 89.099036] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 89.099056] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 89.099079] livepatch: 'test_klp_livepatch': starting unpatching transition [ 89.907443] livepatch: 'test_klp_livepatch': completing unpatching transition [ 89.908927] livepatch: 'test_klp_livepatch': unpatching complete [ 90.008993] % rmmod test_klp_livepatch [ 90.075281] ===== TEST: atomic replace livepatch ===== [ 90.078563] % modprobe test_klp_livepatch [ 90.080025] livepatch: enabling patch 'test_klp_livepatch' [ 90.080027] livepatch: 'test_klp_livepatch': initializing patching transition [ 90.081063] livepatch: 'test_klp_livepatch': starting patching transition [ 91.667362] livepatch: 'test_klp_livepatch': completing patching transition [ 91.667466] livepatch: 'test_klp_livepatch': patching complete [ 91.711116] test_klp_livepatch: this has been live patched [ 91.715609] % modprobe test_klp_atomic_replace replace=1 [ 91.717349] livepatch: enabling patch 'test_klp_atomic_replace' [ 91.717350] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 91.718440] livepatch: 'test_klp_atomic_replace': starting patching transition [ 93.027449] livepatch: 'test_klp_atomic_replace': completing patching transition [ 93.028821] livepatch: 'test_klp_atomic_replace': patching complete [ 93.044211] test_klp_atomic_replace: this has been live patched [ 93.045414] % rmmod test_klp_livepatch [ 93.138826] test_klp_atomic_replace: this has been live patched [ 93.138945] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 93.139013] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 93.139039] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 93.987388] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 93.988892] livepatch: 'test_klp_atomic_replace': unpatching complete [ 94.048696] % rmmod test_klp_atomic_replace [ 94.131346] livepatch: kernel.ftrace_enabled = 1 [ 94.138074] ===== TEST: target module before livepatch ===== [ 94.141712] % modprobe test_klp_callbacks_mod [ 94.143390] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 94.147450] % modprobe test_klp_callbacks_demo [ 94.149518] livepatch: enabling patch 'test_klp_callbacks_demo' [ 94.149520] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 94.149584] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 94.149585] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 94.149586] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 95.827310] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 95.827414] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 95.827416] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 95.827417] livepatch: 'test_klp_callbacks_demo': patching complete [ 95.880751] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 95.880770] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 95.880792] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 95.880793] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 95.880795] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 96.947362] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 96.947467] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 96.947468] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 96.947470] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 96.991491] % rmmod test_klp_callbacks_demo [ 97.047939] % rmmod test_klp_callbacks_mod [ 97.049129] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 97.123448] ===== TEST: module_coming notifier ===== [ 97.126706] % modprobe test_klp_callbacks_demo [ 97.128201] livepatch: enabling patch 'test_klp_callbacks_demo' [ 97.128202] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 97.128221] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 97.128222] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 97.907366] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 97.907523] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 97.907524] livepatch: 'test_klp_callbacks_demo': patching complete [ 97.947504] % modprobe test_klp_callbacks_mod [ 97.948836] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 97.948839] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 97.948841] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 97.948883] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 97.949244] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 97.949263] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 97.949283] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 97.949284] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 97.949285] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 99.117355] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 99.117458] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 99.117460] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 99.117461] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 99.160962] % rmmod test_klp_callbacks_demo [ 99.207962] % rmmod test_klp_callbacks_mod [ 99.209122] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 99.283107] ===== TEST: module_going notifier ===== [ 99.286635] % modprobe test_klp_callbacks_mod [ 99.288047] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 99.291742] % modprobe test_klp_callbacks_demo [ 99.293440] livepatch: enabling patch 'test_klp_callbacks_demo' [ 99.293441] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 99.293462] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 99.293463] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 99.293465] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 101.027350] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 101.027455] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 101.027456] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 101.027458] livepatch: 'test_klp_callbacks_demo': patching complete [ 101.126745] % rmmod test_klp_callbacks_mod [ 101.127848] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 101.127863] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 101.127865] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 101.127866] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 101.187049] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 101.187066] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 101.187085] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 101.187086] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 102.067340] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 102.067461] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 102.067463] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 102.096546] % rmmod test_klp_callbacks_demo [ 102.183243] ===== TEST: module_coming and module_going notifiers ===== [ 102.186391] % modprobe test_klp_callbacks_demo [ 102.187856] livepatch: enabling patch 'test_klp_callbacks_demo' [ 102.187858] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 102.187879] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 102.187881] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 103.827367] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 103.827510] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 103.827511] livepatch: 'test_klp_callbacks_demo': patching complete [ 103.920248] % modprobe test_klp_callbacks_mod [ 103.921535] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 103.921537] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 103.921539] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 103.921581] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 103.922691] % rmmod test_klp_callbacks_mod [ 103.923756] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 103.923786] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 103.923788] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 103.923789] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 103.987019] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 103.987036] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 103.987057] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 103.987058] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 105.027318] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 105.027425] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 105.027426] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 105.096960] % rmmod test_klp_callbacks_demo [ 105.193366] ===== TEST: target module not present ===== [ 105.196426] % modprobe test_klp_callbacks_demo [ 105.197920] livepatch: enabling patch 'test_klp_callbacks_demo' [ 105.197923] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 105.197944] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 105.197945] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 106.957298] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 106.957421] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 106.957422] livepatch: 'test_klp_callbacks_demo': patching complete [ 107.027668] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 107.027687] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 107.027708] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 107.027709] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 108.067334] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 108.067440] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 108.067441] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 108.137719] % rmmod test_klp_callbacks_demo [ 108.213123] ===== TEST: pre-patch callback -ENODEV ===== [ 108.216268] % modprobe test_klp_callbacks_mod [ 108.217645] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 108.218019] % modprobe test_klp_callbacks_demo pre_patch_ret=-19 [ 108.219501] livepatch: enabling patch 'test_klp_callbacks_demo' [ 108.219503] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 108.219523] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 108.219524] livepatch: pre-patch callback failed for object 'vmlinux' [ 108.219524] livepatch: failed to enable patch 'test_klp_callbacks_demo' [ 108.219526] livepatch: 'test_klp_callbacks_demo': canceling patching transition, going to unpatch [ 108.219527] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 108.219633] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 108.366951] modprobe: ERROR: could not insert 'test_klp_callbacks_demo': No such device [ 108.367826] % rmmod test_klp_callbacks_mod [ 108.368966] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 108.463160] ===== TEST: module_coming + pre-patch callback -ENODEV ===== [ 108.466160] % modprobe test_klp_callbacks_demo [ 108.467614] livepatch: enabling patch 'test_klp_callbacks_demo' [ 108.467616] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 108.467638] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 108.467639] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 109.667362] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 109.667472] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 109.667473] livepatch: 'test_klp_callbacks_demo': patching complete [ 109.689019] % echo -19 > /sys/module/test_klp_callbacks_demo/parameters/pre_patch_ret [ 109.689979] % modprobe test_klp_callbacks_mod [ 109.691291] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 109.691294] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 109.691296] livepatch: pre-patch callback failed for object 'test_klp_callbacks_mod' [ 109.691297] livepatch: patch 'test_klp_callbacks_demo' failed for module 'test_klp_callbacks_mod', refusing to load module 'test_klp_callbacks_mod' [ 109.837006] modprobe: ERROR: could not insert 'test_klp_callbacks_mod': No such device [ 109.837051] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 109.837066] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 109.837088] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 109.837089] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 111.027394] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 111.027554] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 111.027555] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 111.048716] % rmmod test_klp_callbacks_demo [ 111.124777] ===== TEST: multiple target modules ===== [ 111.128696] % modprobe test_klp_callbacks_busy block_transition=N [ 111.130780] test_klp_callbacks_busy: test_klp_callbacks_busy_init [ 111.130784] test_klp_callbacks_busy: busymod_work_func enter [ 111.130786] test_klp_callbacks_busy: busymod_work_func exit [ 111.134478] % modprobe test_klp_callbacks_demo [ 111.135984] livepatch: enabling patch 'test_klp_callbacks_demo' [ 111.135986] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 111.136005] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 111.136006] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 111.137437] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 111.987405] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 111.987513] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 111.987515] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 111.987516] livepatch: 'test_klp_callbacks_demo': patching complete [ 112.058064] % modprobe test_klp_callbacks_mod [ 112.059514] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 112.059516] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 112.059518] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 112.059560] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 112.060788] % rmmod test_klp_callbacks_mod [ 112.061910] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 112.061925] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 112.061927] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 112.061928] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 112.137104] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 112.137122] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 112.137143] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 112.137144] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 112.137146] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 113.027375] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 113.029229] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 113.029230] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 113.029232] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 113.046037] % rmmod test_klp_callbacks_demo [ 113.117945] % rmmod test_klp_callbacks_busy [ 113.119077] test_klp_callbacks_busy: test_klp_callbacks_busy_exit [ 113.184611] ===== TEST: busy target module ===== [ 113.187764] % modprobe test_klp_callbacks_busy block_transition=Y [ 113.189352] test_klp_callbacks_busy: test_klp_callbacks_busy_init [ 113.189356] test_klp_callbacks_busy: busymod_work_func enter [ 113.192845] % modprobe test_klp_callbacks_demo [ 113.194361] livepatch: enabling patch 'test_klp_callbacks_demo' [ 113.194363] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 113.194384] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 113.194385] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 113.195818] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 113.201297] % modprobe test_klp_callbacks_mod [ 113.202625] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 113.202627] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 113.202719] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 113.203890] % rmmod test_klp_callbacks_mod [ 113.204951] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 113.204963] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 113.204964] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 113.267080] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 113.267098] livepatch: 'test_klp_callbacks_demo': reversing transition from patching to unpatching [ 113.267246] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 115.907346] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 115.909130] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 115.909132] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 115.909133] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 115.989675] % rmmod test_klp_callbacks_demo [ 116.047878] % rmmod test_klp_callbacks_busy [ 116.066667] test_klp_callbacks_busy: busymod_work_func exit [ 116.066674] test_klp_callbacks_busy: test_klp_callbacks_busy_exit [ 116.194426] ===== TEST: multiple livepatches ===== [ 116.197597] % modprobe test_klp_callbacks_demo [ 116.199116] livepatch: enabling patch 'test_klp_callbacks_demo' [ 116.199118] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 116.199139] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 116.199140] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 117.667375] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 117.667525] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 117.667527] livepatch: 'test_klp_callbacks_demo': patching complete [ 117.729276] % modprobe test_klp_callbacks_demo2 [ 117.731386] livepatch: enabling patch 'test_klp_callbacks_demo2' [ 117.731388] livepatch: 'test_klp_callbacks_demo2': initializing patching transition [ 117.731409] test_klp_callbacks_demo2: pre_patch_callback: vmlinux [ 117.731410] livepatch: 'test_klp_callbacks_demo2': starting patching transition [ 118.707443] livepatch: 'test_klp_callbacks_demo2': completing patching transition [ 118.707552] test_klp_callbacks_demo2: post_patch_callback: vmlinux [ 118.707553] livepatch: 'test_klp_callbacks_demo2': patching complete [ 118.749944] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled [ 118.749964] livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition [ 118.749986] test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux [ 118.749987] livepatch: 'test_klp_callbacks_demo2': starting unpatching transition [ 119.907371] livepatch: 'test_klp_callbacks_demo2': completing unpatching transition [ 119.907541] test_klp_callbacks_demo2: post_unpatch_callback: vmlinux [ 119.907543] livepatch: 'test_klp_callbacks_demo2': unpatching complete [ 119.960612] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 119.960630] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 119.960649] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 119.960650] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 120.867332] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 120.867435] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 120.867436] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 120.869780] % rmmod test_klp_callbacks_demo2 [ 120.917849] % rmmod test_klp_callbacks_demo [ 120.984589] ===== TEST: atomic replace ===== [ 120.987657] % modprobe test_klp_callbacks_demo [ 120.989209] livepatch: enabling patch 'test_klp_callbacks_demo' [ 120.989211] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 120.989232] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 120.989233] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 121.907296] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 121.907399] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 121.907401] livepatch: 'test_klp_callbacks_demo': patching complete [ 122.010261] % modprobe test_klp_callbacks_demo2 replace=1 [ 122.011745] livepatch: enabling patch 'test_klp_callbacks_demo2' [ 122.011747] livepatch: 'test_klp_callbacks_demo2': initializing patching transition [ 122.011767] test_klp_callbacks_demo2: pre_patch_callback: vmlinux [ 122.011768] livepatch: 'test_klp_callbacks_demo2': starting patching transition [ 122.947337] livepatch: 'test_klp_callbacks_demo2': completing patching transition [ 122.947446] test_klp_callbacks_demo2: post_patch_callback: vmlinux [ 122.947448] livepatch: 'test_klp_callbacks_demo2': patching complete [ 123.030617] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled [ 123.030637] livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition [ 123.030658] test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux [ 123.030659] livepatch: 'test_klp_callbacks_demo2': starting unpatching transition [ 123.907269] livepatch: 'test_klp_callbacks_demo2': completing unpatching transition [ 123.907424] test_klp_callbacks_demo2: post_unpatch_callback: vmlinux [ 123.907426] livepatch: 'test_klp_callbacks_demo2': unpatching complete [ 123.939784] % rmmod test_klp_callbacks_demo2 [ 123.987825] % rmmod test_klp_callbacks_demo [ 124.090148] livepatch: kernel.ftrace_enabled = 1 [ 124.097727] ===== TEST: basic shadow variable API ===== [ 124.101462] % modprobe test_klp_shadow_vars [ 124.103146] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 [ 124.103148] test_klp_shadow_vars: got expected NULL result [ 124.103150] test_klp_shadow_vars: shadow_ctor: PTR3 -> PTR2 [ 124.103151] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 [ 124.103155] test_klp_shadow_vars: shadow_ctor: PTR6 -> PTR5 [ 124.103156] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR1, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR5 = PTR6 [ 124.103158] test_klp_shadow_vars: shadow_ctor: PTR8 -> PTR7 [ 124.103160] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 [ 124.103162] test_klp_shadow_vars: shadow_ctor: PTR11 -> PTR10 [ 124.103163] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR10 = PTR11 [ 124.103165] test_klp_shadow_vars: shadow_ctor: PTR13 -> PTR12 [ 124.103167] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 [ 124.103169] test_klp_shadow_vars: shadow_ctor: PTR16 -> PTR15 [ 124.103170] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR14, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR15 = PTR16 [ 124.103173] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR3 [ 124.103174] test_klp_shadow_vars: got expected PTR3 -> PTR2 result [ 124.103175] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 [ 124.103176] test_klp_shadow_vars: got expected PTR6 -> PTR5 result [ 124.103177] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR8 [ 124.103179] test_klp_shadow_vars: got expected PTR8 -> PTR7 result [ 124.103180] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 [ 124.103181] test_klp_shadow_vars: got expected PTR11 -> PTR10 result [ 124.103182] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR13 [ 124.103184] test_klp_shadow_vars: got expected PTR13 -> PTR12 result [ 124.103185] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 [ 124.103186] test_klp_shadow_vars: got expected PTR16 -> PTR15 result [ 124.103187] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 [ 124.103189] test_klp_shadow_vars: got expected PTR3 -> PTR2 result [ 124.103191] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 [ 124.103193] test_klp_shadow_vars: got expected PTR8 -> PTR7 result [ 124.103194] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 [ 124.103196] test_klp_shadow_vars: got expected PTR13 -> PTR12 result [ 124.103197] test_klp_shadow_vars: shadow_dtor(obj=PTR1, shadow_data=PTR3) [ 124.103199] test_klp_shadow_vars: klp_shadow_free(obj=PTR1, id=0x1234, dtor=PTR17) [ 124.103200] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 [ 124.103201] test_klp_shadow_vars: got expected NULL result [ 124.103202] test_klp_shadow_vars: shadow_dtor(obj=PTR9, shadow_data=PTR8) [ 124.103204] test_klp_shadow_vars: klp_shadow_free(obj=PTR9, id=0x1234, dtor=PTR17) [ 124.103205] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR0 [ 124.103206] test_klp_shadow_vars: got expected NULL result [ 124.103207] test_klp_shadow_vars: shadow_dtor(obj=PTR14, shadow_data=PTR13) [ 124.103208] test_klp_shadow_vars: klp_shadow_free(obj=PTR14, id=0x1234, dtor=PTR17) [ 124.103209] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR0 [ 124.103211] test_klp_shadow_vars: got expected NULL result [ 124.103212] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 [ 124.103213] test_klp_shadow_vars: got expected PTR6 -> PTR5 result [ 124.103214] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 [ 124.103215] test_klp_shadow_vars: got expected PTR11 -> PTR10 result [ 124.103216] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 [ 124.103218] test_klp_shadow_vars: got expected PTR16 -> PTR15 result [ 124.103231] test_klp_shadow_vars: klp_shadow_free_all(id=0x1235, dtor=PTR0) [ 124.103232] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR0 [ 124.103233] test_klp_shadow_vars: got expected NULL result [ 124.103234] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR0 [ 124.103235] test_klp_shadow_vars: got expected NULL result [ 124.103236] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR0 [ 124.103238] test_klp_shadow_vars: got expected NULL result [ 124.104546] % rmmod test_klp_shadow_vars [ 124.201338] livepatch: kernel.ftrace_enabled = 1 [ 124.208997] ===== TEST: system state modification ===== [ 124.212733] % modprobe test_klp_state [ 124.214788] livepatch: enabling patch 'test_klp_state' [ 124.214790] livepatch: 'test_klp_state': initializing patching transition [ 124.214811] test_klp_state: pre_patch_callback: vmlinux [ 124.214812] test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel [ 124.214814] livepatch: 'test_klp_state': starting patching transition [ 125.107324] livepatch: 'test_klp_state': completing patching transition [ 125.107502] test_klp_state: post_patch_callback: vmlinux [ 125.107504] test_klp_state: fix_console_loglevel: fixing console_loglevel [ 125.107505] livepatch: 'test_klp_state': patching complete [ 125.132083] % echo 0 > /sys/kernel/livepatch/test_klp_state/enabled [ 125.132120] livepatch: 'test_klp_state': initializing unpatching transition [ 125.132141] test_klp_state: pre_unpatch_callback: vmlinux [ 125.132142] test_klp_state: restore_console_loglevel: restoring console_loglevel [ 125.132143] livepatch: 'test_klp_state': starting unpatching transition [ 125.987299] livepatch: 'test_klp_state': completing unpatching transition [ 125.987400] test_klp_state: post_unpatch_callback: vmlinux [ 125.987401] test_klp_state: free_loglevel_state: freeing space for the stored console_loglevel [ 125.987402] livepatch: 'test_klp_state': unpatching complete [ 126.040767] % rmmod test_klp_state [ 126.104509] ===== TEST: taking over system state modification ===== [ 126.107689] % modprobe test_klp_state [ 126.109150] livepatch: enabling patch 'test_klp_state' [ 126.109152] livepatch: 'test_klp_state': initializing patching transition [ 126.109173] test_klp_state: pre_patch_callback: vmlinux [ 126.109174] test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel [ 126.109176] livepatch: 'test_klp_state': starting patching transition [ 127.107325] livepatch: 'test_klp_state': completing patching transition [ 127.107431] test_klp_state: post_patch_callback: vmlinux [ 127.107432] test_klp_state: fix_console_loglevel: fixing console_loglevel [ 127.107433] livepatch: 'test_klp_state': patching complete [ 127.131647] % modprobe test_klp_state2 [ 127.133754] livepatch: enabling patch 'test_klp_state2' [ 127.133756] livepatch: 'test_klp_state2': initializing patching transition [ 127.133777] test_klp_state2: pre_patch_callback: vmlinux [ 127.133778] test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated [ 127.133779] livepatch: 'test_klp_state2': starting patching transition [ 127.987333] livepatch: 'test_klp_state2': completing patching transition [ 127.987456] test_klp_state2: post_patch_callback: vmlinux [ 127.987457] test_klp_state2: fix_console_loglevel: taking over the console_loglevel change [ 127.987458] livepatch: 'test_klp_state2': patching complete [ 128.051214] % rmmod test_klp_state [ 128.117089] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 128.117108] livepatch: 'test_klp_state2': initializing unpatching transition [ 128.117128] test_klp_state2: pre_unpatch_callback: vmlinux [ 128.117129] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 128.117131] livepatch: 'test_klp_state2': starting unpatching transition [ 129.027341] livepatch: 'test_klp_state2': completing unpatching transition [ 129.027447] test_klp_state2: post_unpatch_callback: vmlinux [ 129.027449] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 129.027451] livepatch: 'test_klp_state2': unpatching complete [ 129.127118] % rmmod test_klp_state2 [ 129.194469] ===== TEST: compatible cumulative livepatches ===== [ 129.197663] % modprobe test_klp_state2 [ 129.199144] livepatch: enabling patch 'test_klp_state2' [ 129.199146] livepatch: 'test_klp_state2': initializing patching transition [ 129.199166] test_klp_state2: pre_patch_callback: vmlinux [ 129.199167] test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel [ 129.199168] livepatch: 'test_klp_state2': starting patching transition [ 130.707290] livepatch: 'test_klp_state2': completing patching transition [ 130.707484] test_klp_state2: post_patch_callback: vmlinux [ 130.707485] test_klp_state2: fix_console_loglevel: fixing console_loglevel [ 130.707486] livepatch: 'test_klp_state2': patching complete [ 130.728829] % modprobe test_klp_state3 [ 130.730860] livepatch: enabling patch 'test_klp_state3' [ 130.730863] livepatch: 'test_klp_state3': initializing patching transition [ 130.730883] test_klp_state3: pre_patch_callback: vmlinux [ 130.730884] test_klp_state3: allocate_loglevel_state: space to store console_loglevel already allocated [ 130.730886] livepatch: 'test_klp_state3': starting patching transition [ 131.747404] livepatch: 'test_klp_state3': completing patching transition [ 131.747514] test_klp_state3: post_patch_callback: vmlinux [ 131.747516] test_klp_state3: fix_console_loglevel: taking over the console_loglevel change [ 131.747517] livepatch: 'test_klp_state3': patching complete [ 131.751280] % rmmod test_klp_state2 [ 131.830254] % modprobe test_klp_state2 [ 131.831912] livepatch: enabling patch 'test_klp_state2' [ 131.831914] livepatch: 'test_klp_state2': initializing patching transition [ 131.831932] test_klp_state2: pre_patch_callback: vmlinux [ 131.831933] test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated [ 131.831934] livepatch: 'test_klp_state2': starting patching transition [ 132.787297] livepatch: 'test_klp_state2': completing patching transition [ 132.787417] test_klp_state2: post_patch_callback: vmlinux [ 132.787418] test_klp_state2: fix_console_loglevel: taking over the console_loglevel change [ 132.787420] livepatch: 'test_klp_state2': patching complete [ 132.849950] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 132.850015] livepatch: 'test_klp_state2': initializing unpatching transition [ 132.850036] test_klp_state2: pre_unpatch_callback: vmlinux [ 132.850037] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 132.850038] livepatch: 'test_klp_state2': starting unpatching transition [ 133.907269] livepatch: 'test_klp_state2': completing unpatching transition [ 133.907403] test_klp_state2: post_unpatch_callback: vmlinux [ 133.907405] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 133.907406] livepatch: 'test_klp_state2': unpatching complete [ 133.960649] % rmmod test_klp_state2 [ 134.007856] % rmmod test_klp_state3 [ 134.074550] ===== TEST: incompatible cumulative livepatches ===== [ 134.077882] % modprobe test_klp_state2 [ 134.079476] livepatch: enabling patch 'test_klp_state2' [ 134.079478] livepatch: 'test_klp_state2': initializing patching transition [ 134.079498] test_klp_state2: pre_patch_callback: vmlinux [ 134.079499] test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel [ 134.079501] livepatch: 'test_klp_state2': starting patching transition [ 135.587306] livepatch: 'test_klp_state2': completing patching transition [ 135.587415] test_klp_state2: post_patch_callback: vmlinux [ 135.587417] test_klp_state2: fix_console_loglevel: fixing console_loglevel [ 135.587418] livepatch: 'test_klp_state2': patching complete [ 135.606549] % modprobe test_klp_state [ 135.608261] livepatch: Livepatch patch (test_klp_state) is not compatible with the already installed livepatches. [ 135.736937] modprobe: ERROR: could not insert 'test_klp_state': Invalid argument [ 135.736975] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 135.736992] livepatch: 'test_klp_state2': initializing unpatching transition [ 135.737013] test_klp_state2: pre_unpatch_callback: vmlinux [ 135.737014] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 135.737015] livepatch: 'test_klp_state2': starting unpatching transition [ 136.947325] livepatch: 'test_klp_state2': completing unpatching transition [ 136.947481] test_klp_state2: post_unpatch_callback: vmlinux [ 136.947482] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 136.947483] livepatch: 'test_klp_state2': unpatching complete [ 136.948539] % rmmod test_klp_state2 [ 137.041414] livepatch: kernel.ftrace_enabled = 1 [ 137.049296] ===== TEST: livepatch interaction with ftrace_enabled sysctl ===== [ 137.051220] livepatch: kernel.ftrace_enabled = 0 [ 137.051281] % modprobe test_klp_livepatch [ 137.052860] livepatch: enabling patch 'test_klp_livepatch' [ 137.052862] livepatch: 'test_klp_livepatch': initializing patching transition [ 137.052885] livepatch: failed to register ftrace handler for function 'cmdline_proc_show' (-16) [ 137.052887] livepatch: failed to patch object 'vmlinux' [ 137.052888] livepatch: failed to enable patch 'test_klp_livepatch' [ 137.052889] livepatch: 'test_klp_livepatch': canceling patching transition, going to unpatch [ 137.052890] livepatch: 'test_klp_livepatch': completing unpatching transition [ 137.052996] livepatch: 'test_klp_livepatch': unpatching complete [ 137.176943] modprobe: ERROR: could not insert 'test_klp_livepatch': Device or resource busy [ 137.178976] livepatch: kernel.ftrace_enabled = 1 [ 137.182231] % modprobe test_klp_livepatch [ 137.183760] livepatch: enabling patch 'test_klp_livepatch' [ 137.183762] livepatch: 'test_klp_livepatch': initializing patching transition [ 137.184843] livepatch: 'test_klp_livepatch': starting patching transition [ 138.067403] livepatch: 'test_klp_livepatch': completing patching transition [ 138.067507] livepatch: 'test_klp_livepatch': patching complete [ 138.105610] livepatch: sysctl: setting key "kernel.ftrace_enabled": Device or resource busy [ 138.106627] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 138.106648] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 138.106672] livepatch: 'test_klp_livepatch': starting unpatching transition [ 139.107365] livepatch: 'test_klp_livepatch': completing unpatching transition [ 139.108879] livepatch: 'test_klp_livepatch': unpatching complete [ 139.116355] % rmmod test_klp_livepatch [ 139.200586] livepatch: kernel.ftrace_enabled = 1 [ 139.208530] ===== TEST: sysfs test ===== [ 139.211756] % modprobe test_klp_livepatch [ 139.213178] livepatch: enabling patch 'test_klp_livepatch' [ 139.213180] livepatch: 'test_klp_livepatch': initializing patching transition [ 139.214331] livepatch: 'test_klp_livepatch': starting patching transition [ 140.867306] livepatch: 'test_klp_livepatch': completing patching transition [ 140.867409] livepatch: 'test_klp_livepatch': patching complete [ 140.953991] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 140.954006] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 140.954028] livepatch: 'test_klp_livepatch': starting unpatching transition [ 141.997333] livepatch: 'test_klp_livepatch': completing unpatching transition [ 141.998940] livepatch: 'test_klp_livepatch': unpatching complete [ 142.064873] % rmmod test_klp_livepatch [ 142.144542] ===== TEST: sysfs test object/patched ===== [ 142.147844] % modprobe test_klp_callbacks_demo [ 142.149314] livepatch: enabling patch 'test_klp_callbacks_demo' [ 142.149316] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 142.149336] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 142.149337] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 143.027295] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 143.027399] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 143.027400] livepatch: 'test_klp_callbacks_demo': patching complete [ 143.071068] % modprobe test_klp_callbacks_mod [ 143.072452] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 143.072454] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 143.072456] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 143.072497] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 143.074775] % rmmod test_klp_callbacks_mod [ 143.076064] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 143.076077] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 143.076079] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 143.076081] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 143.137979] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 143.138015] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 143.138036] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 143.138038] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 144.147343] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 144.147528] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 144.147530] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 144.249115] % rmmod test_klp_callbacks_demo [ 149.652836] livepatch: kernel.ftrace_enabled = 1 [ 149.660651] ===== TEST: basic function patching ===== [ 149.663714] % modprobe test_klp_livepatch [ 149.665324] livepatch: enabling patch 'test_klp_livepatch' [ 149.665326] livepatch: 'test_klp_livepatch': initializing patching transition [ 149.666432] livepatch: 'test_klp_livepatch': starting patching transition [ 151.027254] livepatch: 'test_klp_livepatch': completing patching transition [ 151.027390] livepatch: 'test_klp_livepatch': patching complete [ 151.092898] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 151.092917] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 151.092934] livepatch: 'test_klp_livepatch': starting unpatching transition [ 152.067265] livepatch: 'test_klp_livepatch': completing unpatching transition [ 152.068794] livepatch: 'test_klp_livepatch': unpatching complete [ 152.102901] % rmmod test_klp_livepatch [ 152.175346] ===== TEST: multiple livepatches ===== [ 152.178402] % modprobe test_klp_livepatch [ 152.179854] livepatch: enabling patch 'test_klp_livepatch' [ 152.179857] livepatch: 'test_klp_livepatch': initializing patching transition [ 152.181052] livepatch: 'test_klp_livepatch': starting patching transition [ 153.587227] livepatch: 'test_klp_livepatch': completing patching transition [ 153.587346] livepatch: 'test_klp_livepatch': patching complete [ 153.605914] test_klp_livepatch: this has been live patched [ 153.610106] % modprobe test_klp_atomic_replace replace=0 [ 153.611743] livepatch: enabling patch 'test_klp_atomic_replace' [ 153.611746] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 153.612988] livepatch: 'test_klp_atomic_replace': starting patching transition [ 154.867269] livepatch: 'test_klp_atomic_replace': completing patching transition [ 154.867427] livepatch: 'test_klp_atomic_replace': patching complete [ 154.936390] test_klp_livepatch: this has been live patched [ 154.937249] test_klp_atomic_replace: this has been live patched [ 154.937424] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 154.937443] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 154.937463] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 156.067196] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 156.068608] livepatch: 'test_klp_atomic_replace': unpatching complete [ 156.148189] % rmmod test_klp_atomic_replace [ 156.197593] test_klp_livepatch: this has been live patched [ 156.198534] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 156.198551] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 156.198569] livepatch: 'test_klp_livepatch': starting unpatching transition [ 157.027245] livepatch: 'test_klp_livepatch': completing unpatching transition [ 157.028678] livepatch: 'test_klp_livepatch': unpatching complete [ 157.107307] % rmmod test_klp_livepatch [ 157.196290] ===== TEST: atomic replace livepatch ===== [ 157.199586] % modprobe test_klp_livepatch [ 157.201016] livepatch: enabling patch 'test_klp_livepatch' [ 157.201018] livepatch: 'test_klp_livepatch': initializing patching transition [ 157.202113] livepatch: 'test_klp_livepatch': starting patching transition [ 159.027189] livepatch: 'test_klp_livepatch': completing patching transition [ 159.027295] livepatch: 'test_klp_livepatch': patching complete [ 159.033053] test_klp_livepatch: this has been live patched [ 159.037594] % modprobe test_klp_atomic_replace replace=1 [ 159.039272] livepatch: enabling patch 'test_klp_atomic_replace' [ 159.039274] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 159.040394] livepatch: 'test_klp_atomic_replace': starting patching transition [ 160.627247] livepatch: 'test_klp_atomic_replace': completing patching transition [ 160.628733] livepatch: 'test_klp_atomic_replace': patching complete [ 160.669276] test_klp_atomic_replace: this has been live patched [ 160.670250] % rmmod test_klp_livepatch [ 160.728472] test_klp_atomic_replace: this has been live patched [ 160.728578] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 160.728647] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 160.728675] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 162.067222] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 162.068711] livepatch: 'test_klp_atomic_replace': unpatching complete [ 162.140945] % rmmod test_klp_atomic_replace [ 162.231887] livepatch: kernel.ftrace_enabled = 1 [ 162.239588] ===== TEST: target module before livepatch ===== [ 162.242938] % modprobe test_klp_callbacks_mod [ 162.244287] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 162.247833] % modprobe test_klp_callbacks_demo [ 162.249367] livepatch: enabling patch 'test_klp_callbacks_demo' [ 162.249369] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 162.249388] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 162.249389] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 162.249406] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 163.747295] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 163.747452] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 163.747454] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 163.747456] livepatch: 'test_klp_callbacks_demo': patching complete [ 163.776543] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 163.776563] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 163.776586] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 163.776587] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 163.776589] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 165.027266] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 165.027372] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 165.027374] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 165.027375] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 165.088636] % rmmod test_klp_callbacks_demo [ 165.147720] % rmmod test_klp_callbacks_mod [ 165.148920] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 165.243998] ===== TEST: module_coming notifier ===== [ 165.247169] % modprobe test_klp_callbacks_demo [ 165.248711] livepatch: enabling patch 'test_klp_callbacks_demo' [ 165.248713] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 165.248734] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 165.248735] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 166.707205] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 166.707378] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 166.707380] livepatch: 'test_klp_callbacks_demo': patching complete [ 166.778763] % modprobe test_klp_callbacks_mod [ 166.780198] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 166.780201] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 166.780203] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 166.780245] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 166.780610] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 166.780628] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 166.780649] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 166.780650] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 166.780652] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 168.067171] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 168.067288] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 168.067289] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 168.067291] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 168.092769] % rmmod test_klp_callbacks_demo [ 168.137636] % rmmod test_klp_callbacks_mod [ 168.138733] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 168.214554] ===== TEST: module_going notifier ===== [ 168.217657] % modprobe test_klp_callbacks_mod [ 168.219088] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 168.222668] % modprobe test_klp_callbacks_demo [ 168.224189] livepatch: enabling patch 'test_klp_callbacks_demo' [ 168.224190] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 168.224209] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 168.224210] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 168.224211] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 169.027192] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 169.027294] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 169.027296] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 169.027297] livepatch: 'test_klp_callbacks_demo': patching complete [ 169.039955] % rmmod test_klp_callbacks_mod [ 169.041211] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 169.041225] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 169.041227] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 169.041229] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 169.096825] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 169.096842] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 169.096860] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 169.096861] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 170.067135] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 170.067237] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 170.067239] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 170.106247] % rmmod test_klp_callbacks_demo [ 170.184203] ===== TEST: module_coming and module_going notifiers ===== [ 170.187291] % modprobe test_klp_callbacks_demo [ 170.188838] livepatch: enabling patch 'test_klp_callbacks_demo' [ 170.188840] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 170.188861] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 170.188862] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 171.837198] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 171.837326] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 171.837328] livepatch: 'test_klp_callbacks_demo': patching complete [ 171.921732] % modprobe test_klp_callbacks_mod [ 171.923091] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 171.923094] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 171.923096] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 171.923138] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 171.924441] % rmmod test_klp_callbacks_mod [ 171.925535] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 171.925548] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 171.925550] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 171.925551] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 171.966871] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 171.966889] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 171.966909] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 171.966910] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 173.027199] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 173.027354] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 173.027355] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 173.076841] % rmmod test_klp_callbacks_demo [ 173.144067] ===== TEST: target module not present ===== [ 173.147097] % modprobe test_klp_callbacks_demo [ 173.148676] livepatch: enabling patch 'test_klp_callbacks_demo' [ 173.148678] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 173.148717] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 173.148719] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 174.627151] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 174.627256] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 174.627257] livepatch: 'test_klp_callbacks_demo': patching complete [ 174.675094] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 174.675112] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 174.675133] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 174.675134] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 176.067150] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 176.067252] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 176.067253] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 176.088083] % rmmod test_klp_callbacks_demo [ 176.194636] ===== TEST: pre-patch callback -ENODEV ===== [ 176.197807] % modprobe test_klp_callbacks_mod [ 176.199160] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 176.199520] % modprobe test_klp_callbacks_demo pre_patch_ret=-19 [ 176.201031] livepatch: enabling patch 'test_klp_callbacks_demo' [ 176.201033] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 176.201061] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 176.201062] livepatch: pre-patch callback failed for object 'vmlinux' [ 176.201063] livepatch: failed to enable patch 'test_klp_callbacks_demo' [ 176.201064] livepatch: 'test_klp_callbacks_demo': canceling patching transition, going to unpatch [ 176.201079] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 176.201187] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 176.346872] modprobe: ERROR: could not insert 'test_klp_callbacks_demo': No such device [ 176.347900] % rmmod test_klp_callbacks_mod [ 176.349044] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 176.424402] ===== TEST: module_coming + pre-patch callback -ENODEV ===== [ 176.427567] % modprobe test_klp_callbacks_demo [ 176.429103] livepatch: enabling patch 'test_klp_callbacks_demo' [ 176.429105] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 176.429125] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 176.429126] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 177.667156] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 177.667260] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 177.667261] livepatch: 'test_klp_callbacks_demo': patching complete [ 177.753119] % echo -19 > /sys/module/test_klp_callbacks_demo/parameters/pre_patch_ret [ 177.754056] % modprobe test_klp_callbacks_mod [ 177.755378] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 177.755381] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 177.755383] livepatch: pre-patch callback failed for object 'test_klp_callbacks_mod' [ 177.755385] livepatch: patch 'test_klp_callbacks_demo' failed for module 'test_klp_callbacks_mod', refusing to load module 'test_klp_callbacks_mod' [ 177.846782] modprobe: ERROR: could not insert 'test_klp_callbacks_mod': No such device [ 177.846853] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 177.846869] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 177.846891] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 177.846892] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 179.027108] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 179.027212] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 179.027214] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 179.058400] % rmmod test_klp_callbacks_demo [ 179.124598] ===== TEST: multiple target modules ===== [ 179.127765] % modprobe test_klp_callbacks_busy block_transition=N [ 179.129305] test_klp_callbacks_busy: test_klp_callbacks_busy_init [ 179.129311] test_klp_callbacks_busy: busymod_work_func enter [ 179.129313] test_klp_callbacks_busy: busymod_work_func exit [ 179.132729] % modprobe test_klp_callbacks_demo [ 179.134243] livepatch: enabling patch 'test_klp_callbacks_demo' [ 179.134247] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 179.134267] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 179.134268] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 179.135680] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 180.947100] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 180.947201] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 180.947203] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 180.947204] livepatch: 'test_klp_callbacks_demo': patching complete [ 180.970719] % modprobe test_klp_callbacks_mod [ 180.972226] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 180.972228] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 180.972230] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 180.972273] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 180.973615] % rmmod test_klp_callbacks_mod [ 180.974736] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 180.974748] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 180.974750] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 180.974751] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 181.046824] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 181.046842] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 181.046860] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 181.046861] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 181.046863] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 181.907102] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 181.908849] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 181.908851] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 181.908853] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 181.955928] % rmmod test_klp_callbacks_demo [ 182.057660] % rmmod test_klp_callbacks_busy [ 182.058777] test_klp_callbacks_busy: test_klp_callbacks_busy_exit [ 182.134704] ===== TEST: busy target module ===== [ 182.137780] % modprobe test_klp_callbacks_busy block_transition=Y [ 182.139259] test_klp_callbacks_busy: test_klp_callbacks_busy_init [ 182.139263] test_klp_callbacks_busy: busymod_work_func enter [ 182.142889] % modprobe test_klp_callbacks_demo [ 182.144362] livepatch: enabling patch 'test_klp_callbacks_demo' [ 182.144364] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 182.144382] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 182.144383] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 182.145742] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 182.150873] % modprobe test_klp_callbacks_mod [ 182.152293] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 182.152296] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 182.152339] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 182.153479] % rmmod test_klp_callbacks_mod [ 182.154578] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 182.154591] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 182.154592] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 182.196952] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 182.196973] livepatch: 'test_klp_callbacks_demo': reversing transition from patching to unpatching [ 182.197122] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 184.947083] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 184.948859] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 184.948861] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 184.948862] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 185.020008] % rmmod test_klp_callbacks_demo [ 185.077670] % rmmod test_klp_callbacks_busy [ 185.106398] test_klp_callbacks_busy: busymod_work_func exit [ 185.106407] test_klp_callbacks_busy: test_klp_callbacks_busy_exit [ 185.184323] ===== TEST: multiple livepatches ===== [ 185.187426] % modprobe test_klp_callbacks_demo [ 185.188999] livepatch: enabling patch 'test_klp_callbacks_demo' [ 185.189001] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 185.189021] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 185.189022] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 186.067143] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 186.067283] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 186.067284] livepatch: 'test_klp_callbacks_demo': patching complete [ 186.109240] % modprobe test_klp_callbacks_demo2 [ 186.110881] livepatch: enabling patch 'test_klp_callbacks_demo2' [ 186.110883] livepatch: 'test_klp_callbacks_demo2': initializing patching transition [ 186.110904] test_klp_callbacks_demo2: pre_patch_callback: vmlinux [ 186.110906] livepatch: 'test_klp_callbacks_demo2': starting patching transition [ 187.107240] livepatch: 'test_klp_callbacks_demo2': completing patching transition [ 187.107352] test_klp_callbacks_demo2: post_patch_callback: vmlinux [ 187.107353] livepatch: 'test_klp_callbacks_demo2': patching complete [ 187.129168] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled [ 187.129188] livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition [ 187.129208] test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux [ 187.129209] livepatch: 'test_klp_callbacks_demo2': starting unpatching transition [ 187.987516] livepatch: 'test_klp_callbacks_demo2': completing unpatching transition [ 187.987618] test_klp_callbacks_demo2: post_unpatch_callback: vmlinux [ 187.987620] livepatch: 'test_klp_callbacks_demo2': unpatching complete [ 188.037170] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 188.037188] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 188.037205] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 188.037206] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 189.027062] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 189.027164] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 189.027166] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 189.047265] % rmmod test_klp_callbacks_demo2 [ 189.137664] % rmmod test_klp_callbacks_demo [ 189.224455] ===== TEST: atomic replace ===== [ 189.227586] % modprobe test_klp_callbacks_demo [ 189.229201] livepatch: enabling patch 'test_klp_callbacks_demo' [ 189.229203] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 189.229222] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 189.229224] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 190.067084] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 190.067235] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 190.067237] livepatch: 'test_klp_callbacks_demo': patching complete [ 190.148887] % modprobe test_klp_callbacks_demo2 replace=1 [ 190.150416] livepatch: enabling patch 'test_klp_callbacks_demo2' [ 190.150419] livepatch: 'test_klp_callbacks_demo2': initializing patching transition [ 190.150439] test_klp_callbacks_demo2: pre_patch_callback: vmlinux [ 190.150441] livepatch: 'test_klp_callbacks_demo2': starting patching transition [ 191.747107] livepatch: 'test_klp_callbacks_demo2': completing patching transition [ 191.747218] test_klp_callbacks_demo2: post_patch_callback: vmlinux [ 191.747220] livepatch: 'test_klp_callbacks_demo2': patching complete [ 191.778578] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled [ 191.778598] livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition [ 191.778619] test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux [ 191.778621] livepatch: 'test_klp_callbacks_demo2': starting unpatching transition [ 192.947121] livepatch: 'test_klp_callbacks_demo2': completing unpatching transition [ 192.947227] test_klp_callbacks_demo2: post_unpatch_callback: vmlinux [ 192.947229] livepatch: 'test_klp_callbacks_demo2': unpatching complete [ 192.989892] % rmmod test_klp_callbacks_demo2 [ 193.057940] % rmmod test_klp_callbacks_demo [ 193.160197] livepatch: kernel.ftrace_enabled = 1 [ 193.167730] ===== TEST: basic shadow variable API ===== [ 193.170833] % modprobe test_klp_shadow_vars [ 193.172209] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 [ 193.172211] test_klp_shadow_vars: got expected NULL result [ 193.172213] test_klp_shadow_vars: shadow_ctor: PTR3 -> PTR2 [ 193.172214] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 [ 193.172217] test_klp_shadow_vars: shadow_ctor: PTR6 -> PTR5 [ 193.172218] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR1, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR5 = PTR6 [ 193.172220] test_klp_shadow_vars: shadow_ctor: PTR8 -> PTR7 [ 193.172221] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 [ 193.172224] test_klp_shadow_vars: shadow_ctor: PTR11 -> PTR10 [ 193.172225] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR10 = PTR11 [ 193.172227] test_klp_shadow_vars: shadow_ctor: PTR13 -> PTR12 [ 193.172229] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 [ 193.172231] test_klp_shadow_vars: shadow_ctor: PTR16 -> PTR15 [ 193.172232] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR14, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR15 = PTR16 [ 193.172234] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR3 [ 193.172236] test_klp_shadow_vars: got expected PTR3 -> PTR2 result [ 193.172237] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 [ 193.172238] test_klp_shadow_vars: got expected PTR6 -> PTR5 result [ 193.172239] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR8 [ 193.172240] test_klp_shadow_vars: got expected PTR8 -> PTR7 result [ 193.172241] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 [ 193.172243] test_klp_shadow_vars: got expected PTR11 -> PTR10 result [ 193.172244] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR13 [ 193.172245] test_klp_shadow_vars: got expected PTR13 -> PTR12 result [ 193.172246] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 [ 193.172247] test_klp_shadow_vars: got expected PTR16 -> PTR15 result [ 193.172249] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 [ 193.172251] test_klp_shadow_vars: got expected PTR3 -> PTR2 result [ 193.172252] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 [ 193.172254] test_klp_shadow_vars: got expected PTR8 -> PTR7 result [ 193.172255] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 [ 193.172257] test_klp_shadow_vars: got expected PTR13 -> PTR12 result [ 193.172258] test_klp_shadow_vars: shadow_dtor(obj=PTR1, shadow_data=PTR3) [ 193.172260] test_klp_shadow_vars: klp_shadow_free(obj=PTR1, id=0x1234, dtor=PTR17) [ 193.172261] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 [ 193.172262] test_klp_shadow_vars: got expected NULL result [ 193.172263] test_klp_shadow_vars: shadow_dtor(obj=PTR9, shadow_data=PTR8) [ 193.172265] test_klp_shadow_vars: klp_shadow_free(obj=PTR9, id=0x1234, dtor=PTR17) [ 193.172266] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR0 [ 193.172267] test_klp_shadow_vars: got expected NULL result [ 193.172268] test_klp_shadow_vars: shadow_dtor(obj=PTR14, shadow_data=PTR13) [ 193.172269] test_klp_shadow_vars: klp_shadow_free(obj=PTR14, id=0x1234, dtor=PTR17) [ 193.172270] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR0 [ 193.172271] test_klp_shadow_vars: got expected NULL result [ 193.172272] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 [ 193.172274] test_klp_shadow_vars: got expected PTR6 -> PTR5 result [ 193.172275] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 [ 193.172276] test_klp_shadow_vars: got expected PTR11 -> PTR10 result [ 193.172277] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 [ 193.172278] test_klp_shadow_vars: got expected PTR16 -> PTR15 result [ 193.172287] test_klp_shadow_vars: klp_shadow_free_all(id=0x1235, dtor=PTR0) [ 193.172288] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR0 [ 193.172289] test_klp_shadow_vars: got expected NULL result [ 193.172290] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR0 [ 193.172291] test_klp_shadow_vars: got expected NULL result [ 193.172292] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR0 [ 193.172293] test_klp_shadow_vars: got expected NULL result [ 193.173588] % rmmod test_klp_shadow_vars [ 193.270211] livepatch: kernel.ftrace_enabled = 1 [ 193.277772] ===== TEST: system state modification ===== [ 193.280982] % modprobe test_klp_state [ 193.282421] livepatch: enabling patch 'test_klp_state' [ 193.282422] livepatch: 'test_klp_state': initializing patching transition [ 193.282443] test_klp_state: pre_patch_callback: vmlinux [ 193.282444] test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel [ 193.282445] livepatch: 'test_klp_state': starting patching transition [ 194.627016] livepatch: 'test_klp_state': completing patching transition [ 194.627121] test_klp_state: post_patch_callback: vmlinux [ 194.627122] test_klp_state: fix_console_loglevel: fixing console_loglevel [ 194.627123] livepatch: 'test_klp_state': patching complete [ 194.707923] % echo 0 > /sys/kernel/livepatch/test_klp_state/enabled [ 194.707943] livepatch: 'test_klp_state': initializing unpatching transition [ 194.707962] test_klp_state: pre_unpatch_callback: vmlinux [ 194.707963] test_klp_state: restore_console_loglevel: restoring console_loglevel [ 194.707964] livepatch: 'test_klp_state': starting unpatching transition [ 195.667037] livepatch: 'test_klp_state': completing unpatching transition [ 195.667141] test_klp_state: post_unpatch_callback: vmlinux [ 195.667143] test_klp_state: free_loglevel_state: freeing space for the stored console_loglevel [ 195.667144] livepatch: 'test_klp_state': unpatching complete [ 195.718014] % rmmod test_klp_state [ 195.794830] ===== TEST: taking over system state modification ===== [ 195.797971] % modprobe test_klp_state [ 195.799572] livepatch: enabling patch 'test_klp_state' [ 195.799574] livepatch: 'test_klp_state': initializing patching transition [ 195.799595] test_klp_state: pre_patch_callback: vmlinux [ 195.799596] test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel [ 195.799598] livepatch: 'test_klp_state': starting patching transition [ 196.867056] livepatch: 'test_klp_state': completing patching transition [ 196.867162] test_klp_state: post_patch_callback: vmlinux [ 196.867164] test_klp_state: fix_console_loglevel: fixing console_loglevel [ 196.867165] livepatch: 'test_klp_state': patching complete [ 196.922499] % modprobe test_klp_state2 [ 196.924010] livepatch: enabling patch 'test_klp_state2' [ 196.924012] livepatch: 'test_klp_state2': initializing patching transition [ 196.924032] test_klp_state2: pre_patch_callback: vmlinux [ 196.924033] test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated [ 196.924034] livepatch: 'test_klp_state2': starting patching transition [ 198.627070] livepatch: 'test_klp_state2': completing patching transition [ 198.627227] test_klp_state2: post_patch_callback: vmlinux [ 198.627229] test_klp_state2: fix_console_loglevel: taking over the console_loglevel change [ 198.627230] livepatch: 'test_klp_state2': patching complete [ 198.654169] % rmmod test_klp_state [ 198.696775] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 198.696796] livepatch: 'test_klp_state2': initializing unpatching transition [ 198.696818] test_klp_state2: pre_unpatch_callback: vmlinux [ 198.696820] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 198.696821] livepatch: 'test_klp_state2': starting unpatching transition [ 199.667041] livepatch: 'test_klp_state2': completing unpatching transition [ 199.667222] test_klp_state2: post_unpatch_callback: vmlinux [ 199.667223] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 199.667224] livepatch: 'test_klp_state2': unpatching complete [ 199.706641] % rmmod test_klp_state2 [ 199.794709] ===== TEST: compatible cumulative livepatches ===== [ 199.797951] % modprobe test_klp_state2 [ 199.799497] livepatch: enabling patch 'test_klp_state2' [ 199.799500] livepatch: 'test_klp_state2': initializing patching transition [ 199.799521] test_klp_state2: pre_patch_callback: vmlinux [ 199.799522] test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel [ 199.799524] livepatch: 'test_klp_state2': starting patching transition [ 200.707033] livepatch: 'test_klp_state2': completing patching transition [ 200.707156] test_klp_state2: post_patch_callback: vmlinux [ 200.707158] test_klp_state2: fix_console_loglevel: fixing console_loglevel [ 200.707159] livepatch: 'test_klp_state2': patching complete [ 200.719453] % modprobe test_klp_state3 [ 200.721036] livepatch: enabling patch 'test_klp_state3' [ 200.721040] livepatch: 'test_klp_state3': initializing patching transition [ 200.721063] test_klp_state3: pre_patch_callback: vmlinux [ 200.721064] test_klp_state3: allocate_loglevel_state: space to store console_loglevel already allocated [ 200.721065] livepatch: 'test_klp_state3': starting patching transition [ 201.667030] livepatch: 'test_klp_state3': completing patching transition [ 201.667132] test_klp_state3: post_patch_callback: vmlinux [ 201.667134] test_klp_state3: fix_console_loglevel: taking over the console_loglevel change [ 201.667135] livepatch: 'test_klp_state3': patching complete [ 201.740654] % rmmod test_klp_state2 [ 201.790108] % modprobe test_klp_state2 [ 201.791613] livepatch: enabling patch 'test_klp_state2' [ 201.791616] livepatch: 'test_klp_state2': initializing patching transition [ 201.791636] test_klp_state2: pre_patch_callback: vmlinux [ 201.791637] test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated [ 201.791639] livepatch: 'test_klp_state2': starting patching transition [ 202.947001] livepatch: 'test_klp_state2': completing patching transition [ 202.947134] test_klp_state2: post_patch_callback: vmlinux [ 202.947136] test_klp_state2: fix_console_loglevel: taking over the console_loglevel change [ 202.947137] livepatch: 'test_klp_state2': patching complete [ 203.013457] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 203.013476] livepatch: 'test_klp_state2': initializing unpatching transition [ 203.013497] test_klp_state2: pre_unpatch_callback: vmlinux [ 203.013498] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 203.013499] livepatch: 'test_klp_state2': starting unpatching transition [ 204.627021] livepatch: 'test_klp_state2': completing unpatching transition [ 204.627127] test_klp_state2: post_unpatch_callback: vmlinux [ 204.627128] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 204.627130] livepatch: 'test_klp_state2': unpatching complete [ 204.628240] % rmmod test_klp_state2 [ 204.677492] % rmmod test_klp_state3 [ 204.754498] ===== TEST: incompatible cumulative livepatches ===== [ 204.757803] % modprobe test_klp_state2 [ 204.759469] livepatch: enabling patch 'test_klp_state2' [ 204.759471] livepatch: 'test_klp_state2': initializing patching transition [ 204.759509] test_klp_state2: pre_patch_callback: vmlinux [ 204.759511] test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel [ 204.759512] livepatch: 'test_klp_state2': starting patching transition [ 205.667054] livepatch: 'test_klp_state2': completing patching transition [ 205.667221] test_klp_state2: post_patch_callback: vmlinux [ 205.667223] test_klp_state2: fix_console_loglevel: fixing console_loglevel [ 205.667224] livepatch: 'test_klp_state2': patching complete [ 205.676418] % modprobe test_klp_state [ 205.678021] livepatch: Livepatch patch (test_klp_state) is not compatible with the already installed livepatches. [ 205.796666] modprobe: ERROR: could not insert 'test_klp_state': Invalid argument [ 205.796711] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 205.796727] livepatch: 'test_klp_state2': initializing unpatching transition [ 205.796748] test_klp_state2: pre_unpatch_callback: vmlinux [ 205.796749] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 205.796750] livepatch: 'test_klp_state2': starting unpatching transition [ 206.627024] livepatch: 'test_klp_state2': completing unpatching transition [ 206.627126] test_klp_state2: post_unpatch_callback: vmlinux [ 206.627127] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 206.627128] livepatch: 'test_klp_state2': unpatching complete [ 206.705649] % rmmod test_klp_state2 [ 206.799832] livepatch: kernel.ftrace_enabled = 1 [ 206.807523] ===== TEST: livepatch interaction with ftrace_enabled sysctl ===== [ 206.809453] livepatch: kernel.ftrace_enabled = 0 [ 206.809519] % modprobe test_klp_livepatch [ 206.811132] livepatch: enabling patch 'test_klp_livepatch' [ 206.811134] livepatch: 'test_klp_livepatch': initializing patching transition [ 206.811157] livepatch: failed to register ftrace handler for function 'cmdline_proc_show' (-16) [ 206.811159] livepatch: failed to patch object 'vmlinux' [ 206.811160] livepatch: failed to enable patch 'test_klp_livepatch' [ 206.811161] livepatch: 'test_klp_livepatch': canceling patching transition, going to unpatch [ 206.811162] livepatch: 'test_klp_livepatch': completing unpatching transition [ 206.811267] livepatch: 'test_klp_livepatch': unpatching complete [ 206.946752] modprobe: ERROR: could not insert 'test_klp_livepatch': Device or resource busy [ 206.948665] livepatch: kernel.ftrace_enabled = 1 [ 206.951864] % modprobe test_klp_livepatch [ 206.953500] livepatch: enabling patch 'test_klp_livepatch' [ 206.953502] livepatch: 'test_klp_livepatch': initializing patching transition [ 206.954621] livepatch: 'test_klp_livepatch': starting patching transition [ 208.147074] livepatch: 'test_klp_livepatch': completing patching transition [ 208.147180] livepatch: 'test_klp_livepatch': patching complete [ 208.181130] livepatch: sysctl: setting key "kernel.ftrace_enabled": Device or resource busy [ 208.182202] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 208.182223] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 208.182241] livepatch: 'test_klp_livepatch': starting unpatching transition [ 209.106989] livepatch: 'test_klp_livepatch': completing unpatching transition [ 209.108516] livepatch: 'test_klp_livepatch': unpatching complete [ 209.192468] % rmmod test_klp_livepatch [ 209.269412] livepatch: kernel.ftrace_enabled = 1 [ 209.277289] ===== TEST: sysfs test ===== [ 209.280562] % modprobe test_klp_livepatch [ 209.282041] livepatch: enabling patch 'test_klp_livepatch' [ 209.282043] livepatch: 'test_klp_livepatch': initializing patching transition [ 209.283130] livepatch: 'test_klp_livepatch': starting patching transition [ 210.946994] livepatch: 'test_klp_livepatch': completing patching transition [ 210.947096] livepatch: 'test_klp_livepatch': patching complete [ 211.020069] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 211.020084] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 211.020103] livepatch: 'test_klp_livepatch': starting unpatching transition [ 211.906955] livepatch: 'test_klp_livepatch': completing unpatching transition [ 211.908429] livepatch: 'test_klp_livepatch': unpatching complete [ 211.928959] % rmmod test_klp_livepatch [ 212.004690] ===== TEST: sysfs test object/patched ===== [ 212.007954] % modprobe test_klp_callbacks_demo [ 212.009626] livepatch: enabling patch 'test_klp_callbacks_demo' [ 212.009628] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 212.009649] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 212.009650] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 213.106985] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 213.107148] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 213.107150] livepatch: 'test_klp_callbacks_demo': patching complete [ 213.133983] % modprobe test_klp_callbacks_mod [ 213.135432] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 213.135434] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 213.135436] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 213.135478] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 213.137671] % rmmod test_klp_callbacks_mod [ 213.138782] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 213.138796] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 213.138798] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 213.138799] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 213.187620] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 213.187639] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 213.187660] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 213.187661] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 214.956966] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 214.957069] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 214.957070] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 215.004034] % rmmod test_klp_callbacks_demo [ 216.486413] livepatch: kernel.ftrace_enabled = 1 [ 216.494184] ===== TEST: basic function patching ===== [ 216.497478] % modprobe test_klp_livepatch [ 216.499123] livepatch: enabling patch 'test_klp_livepatch' [ 216.499125] livepatch: 'test_klp_livepatch': initializing patching transition [ 216.500232] livepatch: 'test_klp_livepatch': starting patching transition [ 217.906980] livepatch: 'test_klp_livepatch': completing patching transition [ 217.907138] livepatch: 'test_klp_livepatch': patching complete [ 217.927548] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 217.927569] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 217.927590] livepatch: 'test_klp_livepatch': starting unpatching transition [ 218.947043] livepatch: 'test_klp_livepatch': completing unpatching transition [ 218.948644] livepatch: 'test_klp_livepatch': unpatching complete [ 219.038726] % rmmod test_klp_livepatch [ 219.115033] ===== TEST: multiple livepatches ===== [ 219.118186] % modprobe test_klp_livepatch [ 219.119788] livepatch: enabling patch 'test_klp_livepatch' [ 219.119790] livepatch: 'test_klp_livepatch': initializing patching transition [ 219.120986] livepatch: 'test_klp_livepatch': starting patching transition [ 220.866989] livepatch: 'test_klp_livepatch': completing patching transition [ 220.867145] livepatch: 'test_klp_livepatch': patching complete [ 220.952783] test_klp_livepatch: this has been live patched [ 220.957044] % modprobe test_klp_atomic_replace replace=0 [ 220.958580] livepatch: enabling patch 'test_klp_atomic_replace' [ 220.958582] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 220.959660] livepatch: 'test_klp_atomic_replace': starting patching transition [ 221.826984] livepatch: 'test_klp_atomic_replace': completing patching transition [ 221.827087] livepatch: 'test_klp_atomic_replace': patching complete [ 221.877823] test_klp_livepatch: this has been live patched [ 221.878665] test_klp_atomic_replace: this has been live patched [ 221.878801] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 221.878822] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 221.878843] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 222.947011] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 222.948465] livepatch: 'test_klp_atomic_replace': unpatching complete [ 222.989788] % rmmod test_klp_atomic_replace [ 223.047531] test_klp_livepatch: this has been live patched [ 223.048613] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 223.048632] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 223.048654] livepatch: 'test_klp_livepatch': starting unpatching transition [ 223.987012] livepatch: 'test_klp_livepatch': completing unpatching transition [ 223.988534] livepatch: 'test_klp_livepatch': unpatching complete [ 224.059000] % rmmod test_klp_livepatch [ 224.156318] ===== TEST: atomic replace livepatch ===== [ 224.159489] % modprobe test_klp_livepatch [ 224.160923] livepatch: enabling patch 'test_klp_livepatch' [ 224.160926] livepatch: 'test_klp_livepatch': initializing patching transition [ 224.162024] livepatch: 'test_klp_livepatch': starting patching transition [ 225.666965] livepatch: 'test_klp_livepatch': completing patching transition [ 225.667118] livepatch: 'test_klp_livepatch': patching complete [ 225.689716] test_klp_livepatch: this has been live patched [ 225.693937] % modprobe test_klp_atomic_replace replace=1 [ 225.695517] livepatch: enabling patch 'test_klp_atomic_replace' [ 225.695519] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 225.696644] livepatch: 'test_klp_atomic_replace': starting patching transition [ 226.786967] livepatch: 'test_klp_atomic_replace': completing patching transition [ 226.788286] livepatch: 'test_klp_atomic_replace': patching complete [ 226.818010] test_klp_atomic_replace: this has been live patched [ 226.819031] % rmmod test_klp_livepatch [ 226.878235] test_klp_atomic_replace: this has been live patched [ 226.878402] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 226.878421] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 226.878443] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 227.907041] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 227.908601] livepatch: 'test_klp_atomic_replace': unpatching complete [ 227.988889] % rmmod test_klp_atomic_replace [ 228.081616] livepatch: kernel.ftrace_enabled = 1 [ 228.089746] ===== TEST: target module before livepatch ===== [ 228.093012] % modprobe test_klp_callbacks_mod [ 228.094389] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 228.097768] % modprobe test_klp_callbacks_demo [ 228.099261] livepatch: enabling patch 'test_klp_callbacks_demo' [ 228.099263] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 228.099286] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 228.099287] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 228.099289] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 229.027084] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 229.027196] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 229.027198] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 229.027199] livepatch: 'test_klp_callbacks_demo': patching complete [ 229.118464] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 229.118483] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 229.118504] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 229.118505] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 229.118506] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 230.866938] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 230.867117] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 230.867118] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 230.867120] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 230.935471] % rmmod test_klp_callbacks_demo [ 230.997625] % rmmod test_klp_callbacks_mod [ 230.998771] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 231.064190] ===== TEST: module_coming notifier ===== [ 231.067155] % modprobe test_klp_callbacks_demo [ 231.068630] livepatch: enabling patch 'test_klp_callbacks_demo' [ 231.068632] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 231.068652] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 231.068653] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 232.786968] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 232.787122] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 232.787123] livepatch: 'test_klp_callbacks_demo': patching complete [ 232.800046] % modprobe test_klp_callbacks_mod [ 232.801418] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 232.801421] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 232.801423] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 232.801465] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 232.801808] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 232.801826] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 232.801848] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 232.801849] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 232.801850] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 233.906995] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 233.907137] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 233.907139] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 233.907140] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 233.912080] % rmmod test_klp_callbacks_demo [ 233.987482] % rmmod test_klp_callbacks_mod [ 233.988644] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 234.064216] ===== TEST: module_going notifier ===== [ 234.067491] % modprobe test_klp_callbacks_mod [ 234.068784] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 234.072123] % modprobe test_klp_callbacks_demo [ 234.073590] livepatch: enabling patch 'test_klp_callbacks_demo' [ 234.073592] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 234.073611] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 234.073613] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 234.073614] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 234.866962] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 234.867066] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 234.867068] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 234.867069] livepatch: 'test_klp_callbacks_demo': patching complete [ 234.889218] % rmmod test_klp_callbacks_mod [ 234.890290] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 234.890303] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 234.890305] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 234.890307] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 234.936640] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 234.936658] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 234.936677] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 234.936678] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 235.906953] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 235.907059] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 235.907060] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 235.946374] % rmmod test_klp_callbacks_demo [ 236.044816] ===== TEST: module_coming and module_going notifiers ===== [ 236.047961] % modprobe test_klp_callbacks_demo [ 236.049483] livepatch: enabling patch 'test_klp_callbacks_demo' [ 236.049485] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 236.049505] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 236.049506] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 236.947000] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 236.947176] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 236.947178] livepatch: 'test_klp_callbacks_demo': patching complete [ 236.969682] % modprobe test_klp_callbacks_mod [ 236.971078] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 236.971080] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 236.971082] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 236.971123] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 236.972339] % rmmod test_klp_callbacks_mod [ 236.973427] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 236.973439] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 236.973441] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 236.973442] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 237.036714] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 237.036732] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 237.036753] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 237.036754] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 237.906936] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 237.907087] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 237.907088] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 237.945408] % rmmod test_klp_callbacks_demo
[ 12.425136] scsi 1:0:0:1084178561: scsi scan: INQUIRY successful with code 0x0 [ 12.425141] scsi 1:0:0:1084178561: scsi scan: INQUIRY pass 2 length 164 [ 12.425154] sd 1:0:0:1084113025: Power-on or device reset occurred [ 12.425157] sd 1:0:0:1084113025: [sdg] tag#1665 Done: ADD_TO_MLQUEUE Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.425159] sd 1:0:0:1084113025: [sdg] tag#1665 CDB: Test Unit Ready 00 00 00 00 00 00 [ 12.425161] sd 1:0:0:1084113025: [sdg] tag#1665 Sense Key : Unit Attention [current] [ 12.425163] sd 1:0:0:1084113025: [sdg] tag#1665 Add. Sense: Power on, reset, or bus device reset occurred [ 12.425233] scsi 1:0:0:1084178561: scsi scan: INQUIRY successful with code 0x0 [ 12.425238] scsi 1:0:0:1084178561: Direct-Access IBM 2107900 .102 PQ: 0 ANSI: 6 [ 12.426688] scsi 1:0:0:1084178561: alua: supports implicit TPGS [ 12.426691] scsi 1:0:0:1084178561: alua: device naa.6005076309ffd435000000000000819f port group 0 rel port 243 [ 12.426934] sd 1:0:0:1084178561: sg_alloc: dev=7 [ 12.427059] sd 1:0:0:1084178561: Attached scsi generic sg7 type 0 [ 12.427341] sd 1:0:0:1084113024: scsi scan: device exists on 1:0:0:1084113024 [ 12.427411] sd 1:0:0:1084178561: Power-on or device reset occurred [ 12.427414] sd 1:0:0:1084178561: [sdh] tag#897 Done: ADD_TO_MLQUEUE Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.427417] sd 1:0:0:1084178561: [sdh] tag#897 CDB: Test Unit Ready 00 00 00 00 00 00 [ 12.427419] sd 1:0:0:1084178561: [sdh] tag#897 Sense Key : Unit Attention [current] [ 12.427422] sd 1:0:0:1084178561: [sdh] tag#897 Add. Sense: Power on, reset, or bus device reset occurred [ 12.427766] sd 1:0:0:1084178560: scsi scan: device exists on 1:0:0:1084178560 [ 12.428386] sd 1:0:0:1084113025: scsi scan: device exists on 1:0:0:1084113025 [ 12.428806] sd 1:0:0:1084178561: scsi scan: device exists on 1:0:0:1084178561 [ 12.440305] sd 1:0:0:1084113025: [sdg] 41943040 512-byte logical blocks: (21.5 GB/20.0 GiB) [ 12.440309] sd 1:0:0:1084113024: [sde] 41943040 512-byte logical blocks: (21.5 GB/20.0 GiB) [ 12.440328] sd 1:0:0:1084178561: [sdh] 41943040 512-byte logical blocks: (21.5 GB/20.0 GiB) [ 12.440365] sd 1:0:0:1084178560: [sdf] 41943040 512-byte logical blocks: (21.5 GB/20.0 GiB) [ 12.440405] sd 1:0:0:1084113025: [sdg] Write Protect is off [ 12.440406] sd 1:0:0:1084113025: [sdg] Mode Sense: ed 00 00 08 [ 12.440408] sd 1:0:0:1084113024: [sde] Write Protect is off [ 12.440410] sd 1:0:0:1084113024: [sde] Mode Sense: ed 00 00 08 [ 12.440426] sd 1:0:0:1084178561: [sdh] Write Protect is off [ 12.440428] sd 1:0:0:1084178561: [sdh] Mode Sense: ed 00 00 08 [ 12.440451] sd 1:0:0:1084178560: [sdf] Write Protect is off [ 12.440453] sd 1:0:0:1084178560: [sdf] Mode Sense: ed 00 00 08 [ 12.440613] sd 1:0:0:1084113025: [sdg] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 12.440615] sd 1:0:0:1084113024: [sde] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 12.440625] sd 1:0:0:1084178561: [sdh] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 12.440627] sd 1:0:0:1084178560: [sdf] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 12.440709] sd 1:0:0:1084113024: [sde] tag#2055 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.440712] sd 1:0:0:1084113024: [sde] tag#2055 CDB: Report supported operation codes a3 0c 01 12 00 00 00 00 00 0a 00 00 [ 12.440714] sd 1:0:0:1084113024: [sde] tag#2055 Sense Key : Illegal Request [current] [ 12.440716] sd 1:0:0:1084113024: [sde] tag#2055 Add. Sense: Invalid field in cdb [ 12.440722] sd 1:0:0:1084178560: [sdf] tag#906 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.440724] sd 1:0:0:1084178560: [sdf] tag#906 CDB: Report supported operation codes a3 0c 01 12 00 00 00 00 00 0a 00 00 [ 12.440727] sd 1:0:0:1084178560: [sdf] tag#906 Sense Key : Illegal Request [current] [ 12.440729] sd 1:0:0:1084178560: [sdf] tag#906 Add. Sense: Invalid field in cdb [ 12.440826] sd 1:0:0:1084113025: [sdg] tag#1677 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.440846] sd 1:0:0:1084113025: [sdg] tag#1677 CDB: Report supported operation codes a3 0c 01 12 00 00 00 00 00 0a 00 00 [ 12.440849] sd 1:0:0:1084113025: [sdg] tag#1677 Sense Key : Illegal Request [current] [ 12.440851] sd 1:0:0:1084113025: [sdg] tag#1677 Add. Sense: Invalid field in cdb [ 12.440855] sd 1:0:0:1084113025: [sdg] Disabling DIF Type 1 protection [ 12.440857] sd 1:0:0:1084113025: [sdg] Enabling DIF Type 0 protection [ 12.440861] sd 1:0:0:1084178561: [sdh] tag#325 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.440874] sd 1:0:0:1084178561: [sdh] tag#325 CDB: Report supported operation codes a3 0c 01 12 00 00 00 00 00 0a 00 00 [ 12.440881] sd 1:0:0:1084178561: [sdh] tag#325 Sense Key : Illegal Request [current] [ 12.440882] sd 1:0:0:1084178561: [sdh] tag#325 Add. Sense: Invalid field in cdb [ 12.440886] sd 1:0:0:1084178561: [sdh] Disabling DIF Type 1 protection [ 12.440888] sd 1:0:0:1084178561: [sdh] Enabling DIF Type 0 protection [ 12.443759] sd 1:0:0:1084113024: [sde] tag#1679 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.443780] sd 1:0:0:1084113024: [sde] tag#1679 CDB: Inquiry 12 01 b9 00 04 00 [ 12.443782] sd 1:0:0:1084113024: [sde] tag#1679 Sense Key : Illegal Request [current] [ 12.443785] sd 1:0:0:1084113024: [sde] tag#1679 Add. Sense: Invalid field in cdb [ 12.443797] sd 1:0:0:1084178560: [sdf] tag#327 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.443800] sd 1:0:0:1084178560: [sdf] tag#327 CDB: Inquiry 12 01 b9 00 04 00 [ 12.443802] sd 1:0:0:1084178560: [sdf] tag#327 Sense Key : Illegal Request [current] [ 12.443805] sd 1:0:0:1084178560: [sdf] tag#327 Add. Sense: Invalid field in cdb [ 12.443902] sd 1:0:0:1084113025: [sdg] tag#1682 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.443905] sd 1:0:0:1084113025: [sdg] tag#1682 CDB: Inquiry 12 01 b9 00 04 00 [ 12.443908] sd 1:0:0:1084113025: [sdg] tag#1682 Sense Key : Illegal Request [current] [ 12.443910] sd 1:0:0:1084113025: [sdg] tag#1682 Add. Sense: Invalid field in cdb [ 12.443912] sd 1:0:0:1084178561: [sdh] tag#2057 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [ 12.443917] sd 1:0:0:1084178561: [sdh] tag#2057 CDB: Inquiry 12 01 b9 00 04 00 [ 12.443919] sd 1:0:0:1084178561: [sdh] tag#2057 Sense Key : Illegal Request [current] [ 12.443921] sd 1:0:0:1084178561: [sdh] tag#2057 Add. Sense: Invalid field in cdb [ 12.444277] sd 1:0:0:1084178560: [sdf] Attached SCSI disk [ 12.444413] sd 1:0:0:1084113025: [sdg] Attached SCSI disk [ 12.444437] sd 1:0:0:1084178561: [sdh] Attached SCSI disk [ 12.445055] sde: sde1 [ 12.445135] sd 1:0:0:1084113024: [sde] Attached SCSI disk [ 12.455157] mlx5_core 0001:00:00.0 ens8192f0np0: Link up [ 12.754503] mlx5_core 0000:00:00.0 ens8320f0np0: Link up [ 12.870161] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 12.871810] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 12.873288] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 12.879490] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 12.881609] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 12.883524] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 13.129973] systemd-journald[943]: Compressed data object 621 -> 266 using ZSTD [ 13.130596] systemd-journald[943]: Compressed data object 621 -> 274 using ZSTD [ 14.130283] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 52.526889] crw_info : CRW reports slct=0, oflw=0, chn=0, rsc=B, anc=0, erc=0, rsid=0 [ 64.832872] systemd-journald[943]: Compressed data object 533 -> 400 using ZSTD [ 64.919285] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 64.928008] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 65.045916] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 65.046557] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 65.206974] systemd-journald[943]: Successfully sent stream file descriptor to service manager. [ 84.040569] livepatch: kernel.ftrace_enabled = 1 [ 84.047983] ===== TEST: basic function patching ===== [ 84.052146] % modprobe test_klp_livepatch [ 84.054139] test_klp_livepatch: tainting kernel with TAINT_LIVEPATCH [ 84.054277] livepatch: enabling patch 'test_klp_livepatch' [ 84.054279] livepatch: 'test_klp_livepatch': initializing patching transition [ 84.055514] livepatch: 'test_klp_livepatch': starting patching transition [ 84.867407] livepatch: 'test_klp_livepatch': completing patching transition [ 84.867542] livepatch: 'test_klp_livepatch': patching complete [ 84.872840] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 84.872891] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 84.872925] livepatch: 'test_klp_livepatch': starting unpatching transition [ 85.987407] livepatch: 'test_klp_livepatch': completing unpatching transition [ 85.989034] livepatch: 'test_klp_livepatch': unpatching complete [ 86.084797] % rmmod test_klp_livepatch [ 86.153886] ===== TEST: multiple livepatches ===== [ 86.157188] % modprobe test_klp_livepatch [ 86.158657] livepatch: enabling patch 'test_klp_livepatch' [ 86.158659] livepatch: 'test_klp_livepatch': initializing patching transition [ 86.159793] livepatch: 'test_klp_livepatch': starting patching transition [ 87.027437] livepatch: 'test_klp_livepatch': completing patching transition [ 87.027546] livepatch: 'test_klp_livepatch': patching complete [ 87.078385] test_klp_livepatch: this has been live patched [ 87.083290] % modprobe test_klp_atomic_replace replace=0 [ 87.085500] livepatch: enabling patch 'test_klp_atomic_replace' [ 87.085502] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 87.086685] livepatch: 'test_klp_atomic_replace': starting patching transition [ 87.907412] livepatch: 'test_klp_atomic_replace': completing patching transition [ 87.907555] livepatch: 'test_klp_atomic_replace': patching complete [ 88.004547] test_klp_livepatch: this has been live patched [ 88.005509] test_klp_atomic_replace: this has been live patched [ 88.005634] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 88.005721] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 88.005740] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 88.947422] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 88.948800] livepatch: 'test_klp_atomic_replace': unpatching complete [ 89.016537] % rmmod test_klp_atomic_replace [ 89.097952] test_klp_livepatch: this has been live patched [ 89.099036] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 89.099056] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 89.099079] livepatch: 'test_klp_livepatch': starting unpatching transition [ 89.907443] livepatch: 'test_klp_livepatch': completing unpatching transition [ 89.908927] livepatch: 'test_klp_livepatch': unpatching complete [ 90.008993] % rmmod test_klp_livepatch [ 90.075281] ===== TEST: atomic replace livepatch ===== [ 90.078563] % modprobe test_klp_livepatch [ 90.080025] livepatch: enabling patch 'test_klp_livepatch' [ 90.080027] livepatch: 'test_klp_livepatch': initializing patching transition [ 90.081063] livepatch: 'test_klp_livepatch': starting patching transition [ 91.667362] livepatch: 'test_klp_livepatch': completing patching transition [ 91.667466] livepatch: 'test_klp_livepatch': patching complete [ 91.711116] test_klp_livepatch: this has been live patched [ 91.715609] % modprobe test_klp_atomic_replace replace=1 [ 91.717349] livepatch: enabling patch 'test_klp_atomic_replace' [ 91.717350] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 91.718440] livepatch: 'test_klp_atomic_replace': starting patching transition [ 93.027449] livepatch: 'test_klp_atomic_replace': completing patching transition [ 93.028821] livepatch: 'test_klp_atomic_replace': patching complete [ 93.044211] test_klp_atomic_replace: this has been live patched [ 93.045414] % rmmod test_klp_livepatch [ 93.138826] test_klp_atomic_replace: this has been live patched [ 93.138945] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 93.139013] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 93.139039] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 93.987388] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 93.988892] livepatch: 'test_klp_atomic_replace': unpatching complete [ 94.048696] % rmmod test_klp_atomic_replace [ 94.131346] livepatch: kernel.ftrace_enabled = 1 [ 94.138074] ===== TEST: target module before livepatch ===== [ 94.141712] % modprobe test_klp_callbacks_mod [ 94.143390] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 94.147450] % modprobe test_klp_callbacks_demo [ 94.149518] livepatch: enabling patch 'test_klp_callbacks_demo' [ 94.149520] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 94.149584] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 94.149585] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 94.149586] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 95.827310] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 95.827414] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 95.827416] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 95.827417] livepatch: 'test_klp_callbacks_demo': patching complete [ 95.880751] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 95.880770] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 95.880792] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 95.880793] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 95.880795] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 96.947362] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 96.947467] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 96.947468] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 96.947470] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 96.991491] % rmmod test_klp_callbacks_demo [ 97.047939] % rmmod test_klp_callbacks_mod [ 97.049129] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 97.123448] ===== TEST: module_coming notifier ===== [ 97.126706] % modprobe test_klp_callbacks_demo [ 97.128201] livepatch: enabling patch 'test_klp_callbacks_demo' [ 97.128202] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 97.128221] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 97.128222] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 97.907366] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 97.907523] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 97.907524] livepatch: 'test_klp_callbacks_demo': patching complete [ 97.947504] % modprobe test_klp_callbacks_mod [ 97.948836] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 97.948839] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 97.948841] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 97.948883] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 97.949244] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 97.949263] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 97.949283] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 97.949284] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 97.949285] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 99.117355] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 99.117458] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 99.117460] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 99.117461] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 99.160962] % rmmod test_klp_callbacks_demo [ 99.207962] % rmmod test_klp_callbacks_mod [ 99.209122] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 99.283107] ===== TEST: module_going notifier ===== [ 99.286635] % modprobe test_klp_callbacks_mod [ 99.288047] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 99.291742] % modprobe test_klp_callbacks_demo [ 99.293440] livepatch: enabling patch 'test_klp_callbacks_demo' [ 99.293441] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 99.293462] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 99.293463] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 99.293465] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 101.027350] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 101.027455] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 101.027456] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 101.027458] livepatch: 'test_klp_callbacks_demo': patching complete [ 101.126745] % rmmod test_klp_callbacks_mod [ 101.127848] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 101.127863] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 101.127865] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 101.127866] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 101.187049] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 101.187066] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 101.187085] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 101.187086] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 102.067340] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 102.067461] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 102.067463] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 102.096546] % rmmod test_klp_callbacks_demo [ 102.183243] ===== TEST: module_coming and module_going notifiers ===== [ 102.186391] % modprobe test_klp_callbacks_demo [ 102.187856] livepatch: enabling patch 'test_klp_callbacks_demo' [ 102.187858] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 102.187879] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 102.187881] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 103.827367] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 103.827510] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 103.827511] livepatch: 'test_klp_callbacks_demo': patching complete [ 103.920248] % modprobe test_klp_callbacks_mod [ 103.921535] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 103.921537] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 103.921539] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 103.921581] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 103.922691] % rmmod test_klp_callbacks_mod [ 103.923756] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 103.923786] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 103.923788] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 103.923789] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 103.987019] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 103.987036] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 103.987057] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 103.987058] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 105.027318] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 105.027425] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 105.027426] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 105.096960] % rmmod test_klp_callbacks_demo [ 105.193366] ===== TEST: target module not present ===== [ 105.196426] % modprobe test_klp_callbacks_demo [ 105.197920] livepatch: enabling patch 'test_klp_callbacks_demo' [ 105.197923] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 105.197944] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 105.197945] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 106.957298] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 106.957421] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 106.957422] livepatch: 'test_klp_callbacks_demo': patching complete [ 107.027668] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 107.027687] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 107.027708] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 107.027709] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 108.067334] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 108.067440] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 108.067441] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 108.137719] % rmmod test_klp_callbacks_demo [ 108.213123] ===== TEST: pre-patch callback -ENODEV ===== [ 108.216268] % modprobe test_klp_callbacks_mod [ 108.217645] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 108.218019] % modprobe test_klp_callbacks_demo pre_patch_ret=-19 [ 108.219501] livepatch: enabling patch 'test_klp_callbacks_demo' [ 108.219503] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 108.219523] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 108.219524] livepatch: pre-patch callback failed for object 'vmlinux' [ 108.219524] livepatch: failed to enable patch 'test_klp_callbacks_demo' [ 108.219526] livepatch: 'test_klp_callbacks_demo': canceling patching transition, going to unpatch [ 108.219527] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 108.219633] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 108.366951] modprobe: ERROR: could not insert 'test_klp_callbacks_demo': No such device [ 108.367826] % rmmod test_klp_callbacks_mod [ 108.368966] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 108.463160] ===== TEST: module_coming + pre-patch callback -ENODEV ===== [ 108.466160] % modprobe test_klp_callbacks_demo [ 108.467614] livepatch: enabling patch 'test_klp_callbacks_demo' [ 108.467616] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 108.467638] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 108.467639] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 109.667362] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 109.667472] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 109.667473] livepatch: 'test_klp_callbacks_demo': patching complete [ 109.689019] % echo -19 > /sys/module/test_klp_callbacks_demo/parameters/pre_patch_ret [ 109.689979] % modprobe test_klp_callbacks_mod [ 109.691291] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 109.691294] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 109.691296] livepatch: pre-patch callback failed for object 'test_klp_callbacks_mod' [ 109.691297] livepatch: patch 'test_klp_callbacks_demo' failed for module 'test_klp_callbacks_mod', refusing to load module 'test_klp_callbacks_mod' [ 109.837006] modprobe: ERROR: could not insert 'test_klp_callbacks_mod': No such device [ 109.837051] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 109.837066] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 109.837088] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 109.837089] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 111.027394] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 111.027554] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 111.027555] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 111.048716] % rmmod test_klp_callbacks_demo [ 111.124777] ===== TEST: multiple target modules ===== [ 111.128696] % modprobe test_klp_callbacks_busy block_transition=N [ 111.130780] test_klp_callbacks_busy: test_klp_callbacks_busy_init [ 111.130784] test_klp_callbacks_busy: busymod_work_func enter [ 111.130786] test_klp_callbacks_busy: busymod_work_func exit [ 111.134478] % modprobe test_klp_callbacks_demo [ 111.135984] livepatch: enabling patch 'test_klp_callbacks_demo' [ 111.135986] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 111.136005] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 111.136006] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 111.137437] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 111.987405] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 111.987513] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 111.987515] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 111.987516] livepatch: 'test_klp_callbacks_demo': patching complete [ 112.058064] % modprobe test_klp_callbacks_mod [ 112.059514] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 112.059516] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 112.059518] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 112.059560] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 112.060788] % rmmod test_klp_callbacks_mod [ 112.061910] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 112.061925] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 112.061927] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 112.061928] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 112.137104] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 112.137122] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 112.137143] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 112.137144] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 112.137146] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 113.027375] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 113.029229] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 113.029230] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 113.029232] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 113.046037] % rmmod test_klp_callbacks_demo [ 113.117945] % rmmod test_klp_callbacks_busy [ 113.119077] test_klp_callbacks_busy: test_klp_callbacks_busy_exit [ 113.184611] ===== TEST: busy target module ===== [ 113.187764] % modprobe test_klp_callbacks_busy block_transition=Y [ 113.189352] test_klp_callbacks_busy: test_klp_callbacks_busy_init [ 113.189356] test_klp_callbacks_busy: busymod_work_func enter [ 113.192845] % modprobe test_klp_callbacks_demo [ 113.194361] livepatch: enabling patch 'test_klp_callbacks_demo' [ 113.194363] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 113.194384] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 113.194385] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 113.195818] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 113.201297] % modprobe test_klp_callbacks_mod [ 113.202625] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 113.202627] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 113.202719] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 113.203890] % rmmod test_klp_callbacks_mod [ 113.204951] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 113.204963] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 113.204964] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 113.267080] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 113.267098] livepatch: 'test_klp_callbacks_demo': reversing transition from patching to unpatching [ 113.267246] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 115.907346] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 115.909130] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 115.909132] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 115.909133] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 115.989675] % rmmod test_klp_callbacks_demo [ 116.047878] % rmmod test_klp_callbacks_busy [ 116.066667] test_klp_callbacks_busy: busymod_work_func exit [ 116.066674] test_klp_callbacks_busy: test_klp_callbacks_busy_exit [ 116.194426] ===== TEST: multiple livepatches ===== [ 116.197597] % modprobe test_klp_callbacks_demo [ 116.199116] livepatch: enabling patch 'test_klp_callbacks_demo' [ 116.199118] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 116.199139] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 116.199140] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 117.667375] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 117.667525] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 117.667527] livepatch: 'test_klp_callbacks_demo': patching complete [ 117.729276] % modprobe test_klp_callbacks_demo2 [ 117.731386] livepatch: enabling patch 'test_klp_callbacks_demo2' [ 117.731388] livepatch: 'test_klp_callbacks_demo2': initializing patching transition [ 117.731409] test_klp_callbacks_demo2: pre_patch_callback: vmlinux [ 117.731410] livepatch: 'test_klp_callbacks_demo2': starting patching transition [ 118.707443] livepatch: 'test_klp_callbacks_demo2': completing patching transition [ 118.707552] test_klp_callbacks_demo2: post_patch_callback: vmlinux [ 118.707553] livepatch: 'test_klp_callbacks_demo2': patching complete [ 118.749944] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled [ 118.749964] livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition [ 118.749986] test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux [ 118.749987] livepatch: 'test_klp_callbacks_demo2': starting unpatching transition [ 119.907371] livepatch: 'test_klp_callbacks_demo2': completing unpatching transition [ 119.907541] test_klp_callbacks_demo2: post_unpatch_callback: vmlinux [ 119.907543] livepatch: 'test_klp_callbacks_demo2': unpatching complete [ 119.960612] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 119.960630] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 119.960649] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 119.960650] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 120.867332] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 120.867435] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 120.867436] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 120.869780] % rmmod test_klp_callbacks_demo2 [ 120.917849] % rmmod test_klp_callbacks_demo [ 120.984589] ===== TEST: atomic replace ===== [ 120.987657] % modprobe test_klp_callbacks_demo [ 120.989209] livepatch: enabling patch 'test_klp_callbacks_demo' [ 120.989211] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 120.989232] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 120.989233] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 121.907296] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 121.907399] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 121.907401] livepatch: 'test_klp_callbacks_demo': patching complete [ 122.010261] % modprobe test_klp_callbacks_demo2 replace=1 [ 122.011745] livepatch: enabling patch 'test_klp_callbacks_demo2' [ 122.011747] livepatch: 'test_klp_callbacks_demo2': initializing patching transition [ 122.011767] test_klp_callbacks_demo2: pre_patch_callback: vmlinux [ 122.011768] livepatch: 'test_klp_callbacks_demo2': starting patching transition [ 122.947337] livepatch: 'test_klp_callbacks_demo2': completing patching transition [ 122.947446] test_klp_callbacks_demo2: post_patch_callback: vmlinux [ 122.947448] livepatch: 'test_klp_callbacks_demo2': patching complete [ 123.030617] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled [ 123.030637] livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition [ 123.030658] test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux [ 123.030659] livepatch: 'test_klp_callbacks_demo2': starting unpatching transition [ 123.907269] livepatch: 'test_klp_callbacks_demo2': completing unpatching transition [ 123.907424] test_klp_callbacks_demo2: post_unpatch_callback: vmlinux [ 123.907426] livepatch: 'test_klp_callbacks_demo2': unpatching complete [ 123.939784] % rmmod test_klp_callbacks_demo2 [ 123.987825] % rmmod test_klp_callbacks_demo [ 124.090148] livepatch: kernel.ftrace_enabled = 1 [ 124.097727] ===== TEST: basic shadow variable API ===== [ 124.101462] % modprobe test_klp_shadow_vars [ 124.103146] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 [ 124.103148] test_klp_shadow_vars: got expected NULL result [ 124.103150] test_klp_shadow_vars: shadow_ctor: PTR3 -> PTR2 [ 124.103151] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 [ 124.103155] test_klp_shadow_vars: shadow_ctor: PTR6 -> PTR5 [ 124.103156] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR1, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR5 = PTR6 [ 124.103158] test_klp_shadow_vars: shadow_ctor: PTR8 -> PTR7 [ 124.103160] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 [ 124.103162] test_klp_shadow_vars: shadow_ctor: PTR11 -> PTR10 [ 124.103163] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR10 = PTR11 [ 124.103165] test_klp_shadow_vars: shadow_ctor: PTR13 -> PTR12 [ 124.103167] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 [ 124.103169] test_klp_shadow_vars: shadow_ctor: PTR16 -> PTR15 [ 124.103170] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR14, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR15 = PTR16 [ 124.103173] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR3 [ 124.103174] test_klp_shadow_vars: got expected PTR3 -> PTR2 result [ 124.103175] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 [ 124.103176] test_klp_shadow_vars: got expected PTR6 -> PTR5 result [ 124.103177] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR8 [ 124.103179] test_klp_shadow_vars: got expected PTR8 -> PTR7 result [ 124.103180] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 [ 124.103181] test_klp_shadow_vars: got expected PTR11 -> PTR10 result [ 124.103182] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR13 [ 124.103184] test_klp_shadow_vars: got expected PTR13 -> PTR12 result [ 124.103185] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 [ 124.103186] test_klp_shadow_vars: got expected PTR16 -> PTR15 result [ 124.103187] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 [ 124.103189] test_klp_shadow_vars: got expected PTR3 -> PTR2 result [ 124.103191] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 [ 124.103193] test_klp_shadow_vars: got expected PTR8 -> PTR7 result [ 124.103194] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 [ 124.103196] test_klp_shadow_vars: got expected PTR13 -> PTR12 result [ 124.103197] test_klp_shadow_vars: shadow_dtor(obj=PTR1, shadow_data=PTR3) [ 124.103199] test_klp_shadow_vars: klp_shadow_free(obj=PTR1, id=0x1234, dtor=PTR17) [ 124.103200] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 [ 124.103201] test_klp_shadow_vars: got expected NULL result [ 124.103202] test_klp_shadow_vars: shadow_dtor(obj=PTR9, shadow_data=PTR8) [ 124.103204] test_klp_shadow_vars: klp_shadow_free(obj=PTR9, id=0x1234, dtor=PTR17) [ 124.103205] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR0 [ 124.103206] test_klp_shadow_vars: got expected NULL result [ 124.103207] test_klp_shadow_vars: shadow_dtor(obj=PTR14, shadow_data=PTR13) [ 124.103208] test_klp_shadow_vars: klp_shadow_free(obj=PTR14, id=0x1234, dtor=PTR17) [ 124.103209] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR0 [ 124.103211] test_klp_shadow_vars: got expected NULL result [ 124.103212] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 [ 124.103213] test_klp_shadow_vars: got expected PTR6 -> PTR5 result [ 124.103214] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 [ 124.103215] test_klp_shadow_vars: got expected PTR11 -> PTR10 result [ 124.103216] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 [ 124.103218] test_klp_shadow_vars: got expected PTR16 -> PTR15 result [ 124.103231] test_klp_shadow_vars: klp_shadow_free_all(id=0x1235, dtor=PTR0) [ 124.103232] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR0 [ 124.103233] test_klp_shadow_vars: got expected NULL result [ 124.103234] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR0 [ 124.103235] test_klp_shadow_vars: got expected NULL result [ 124.103236] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR0 [ 124.103238] test_klp_shadow_vars: got expected NULL result [ 124.104546] % rmmod test_klp_shadow_vars [ 124.201338] livepatch: kernel.ftrace_enabled = 1 [ 124.208997] ===== TEST: system state modification ===== [ 124.212733] % modprobe test_klp_state [ 124.214788] livepatch: enabling patch 'test_klp_state' [ 124.214790] livepatch: 'test_klp_state': initializing patching transition [ 124.214811] test_klp_state: pre_patch_callback: vmlinux [ 124.214812] test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel [ 124.214814] livepatch: 'test_klp_state': starting patching transition [ 125.107324] livepatch: 'test_klp_state': completing patching transition [ 125.107502] test_klp_state: post_patch_callback: vmlinux [ 125.107504] test_klp_state: fix_console_loglevel: fixing console_loglevel [ 125.107505] livepatch: 'test_klp_state': patching complete [ 125.132083] % echo 0 > /sys/kernel/livepatch/test_klp_state/enabled [ 125.132120] livepatch: 'test_klp_state': initializing unpatching transition [ 125.132141] test_klp_state: pre_unpatch_callback: vmlinux [ 125.132142] test_klp_state: restore_console_loglevel: restoring console_loglevel [ 125.132143] livepatch: 'test_klp_state': starting unpatching transition [ 125.987299] livepatch: 'test_klp_state': completing unpatching transition [ 125.987400] test_klp_state: post_unpatch_callback: vmlinux [ 125.987401] test_klp_state: free_loglevel_state: freeing space for the stored console_loglevel [ 125.987402] livepatch: 'test_klp_state': unpatching complete [ 126.040767] % rmmod test_klp_state [ 126.104509] ===== TEST: taking over system state modification ===== [ 126.107689] % modprobe test_klp_state [ 126.109150] livepatch: enabling patch 'test_klp_state' [ 126.109152] livepatch: 'test_klp_state': initializing patching transition [ 126.109173] test_klp_state: pre_patch_callback: vmlinux [ 126.109174] test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel [ 126.109176] livepatch: 'test_klp_state': starting patching transition [ 127.107325] livepatch: 'test_klp_state': completing patching transition [ 127.107431] test_klp_state: post_patch_callback: vmlinux [ 127.107432] test_klp_state: fix_console_loglevel: fixing console_loglevel [ 127.107433] livepatch: 'test_klp_state': patching complete [ 127.131647] % modprobe test_klp_state2 [ 127.133754] livepatch: enabling patch 'test_klp_state2' [ 127.133756] livepatch: 'test_klp_state2': initializing patching transition [ 127.133777] test_klp_state2: pre_patch_callback: vmlinux [ 127.133778] test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated [ 127.133779] livepatch: 'test_klp_state2': starting patching transition [ 127.987333] livepatch: 'test_klp_state2': completing patching transition [ 127.987456] test_klp_state2: post_patch_callback: vmlinux [ 127.987457] test_klp_state2: fix_console_loglevel: taking over the console_loglevel change [ 127.987458] livepatch: 'test_klp_state2': patching complete [ 128.051214] % rmmod test_klp_state [ 128.117089] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 128.117108] livepatch: 'test_klp_state2': initializing unpatching transition [ 128.117128] test_klp_state2: pre_unpatch_callback: vmlinux [ 128.117129] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 128.117131] livepatch: 'test_klp_state2': starting unpatching transition [ 129.027341] livepatch: 'test_klp_state2': completing unpatching transition [ 129.027447] test_klp_state2: post_unpatch_callback: vmlinux [ 129.027449] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 129.027451] livepatch: 'test_klp_state2': unpatching complete [ 129.127118] % rmmod test_klp_state2 [ 129.194469] ===== TEST: compatible cumulative livepatches ===== [ 129.197663] % modprobe test_klp_state2 [ 129.199144] livepatch: enabling patch 'test_klp_state2' [ 129.199146] livepatch: 'test_klp_state2': initializing patching transition [ 129.199166] test_klp_state2: pre_patch_callback: vmlinux [ 129.199167] test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel [ 129.199168] livepatch: 'test_klp_state2': starting patching transition [ 130.707290] livepatch: 'test_klp_state2': completing patching transition [ 130.707484] test_klp_state2: post_patch_callback: vmlinux [ 130.707485] test_klp_state2: fix_console_loglevel: fixing console_loglevel [ 130.707486] livepatch: 'test_klp_state2': patching complete [ 130.728829] % modprobe test_klp_state3 [ 130.730860] livepatch: enabling patch 'test_klp_state3' [ 130.730863] livepatch: 'test_klp_state3': initializing patching transition [ 130.730883] test_klp_state3: pre_patch_callback: vmlinux [ 130.730884] test_klp_state3: allocate_loglevel_state: space to store console_loglevel already allocated [ 130.730886] livepatch: 'test_klp_state3': starting patching transition [ 131.747404] livepatch: 'test_klp_state3': completing patching transition [ 131.747514] test_klp_state3: post_patch_callback: vmlinux [ 131.747516] test_klp_state3: fix_console_loglevel: taking over the console_loglevel change [ 131.747517] livepatch: 'test_klp_state3': patching complete [ 131.751280] % rmmod test_klp_state2 [ 131.830254] % modprobe test_klp_state2 [ 131.831912] livepatch: enabling patch 'test_klp_state2' [ 131.831914] livepatch: 'test_klp_state2': initializing patching transition [ 131.831932] test_klp_state2: pre_patch_callback: vmlinux [ 131.831933] test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated [ 131.831934] livepatch: 'test_klp_state2': starting patching transition [ 132.787297] livepatch: 'test_klp_state2': completing patching transition [ 132.787417] test_klp_state2: post_patch_callback: vmlinux [ 132.787418] test_klp_state2: fix_console_loglevel: taking over the console_loglevel change [ 132.787420] livepatch: 'test_klp_state2': patching complete [ 132.849950] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 132.850015] livepatch: 'test_klp_state2': initializing unpatching transition [ 132.850036] test_klp_state2: pre_unpatch_callback: vmlinux [ 132.850037] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 132.850038] livepatch: 'test_klp_state2': starting unpatching transition [ 133.907269] livepatch: 'test_klp_state2': completing unpatching transition [ 133.907403] test_klp_state2: post_unpatch_callback: vmlinux [ 133.907405] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 133.907406] livepatch: 'test_klp_state2': unpatching complete [ 133.960649] % rmmod test_klp_state2 [ 134.007856] % rmmod test_klp_state3 [ 134.074550] ===== TEST: incompatible cumulative livepatches ===== [ 134.077882] % modprobe test_klp_state2 [ 134.079476] livepatch: enabling patch 'test_klp_state2' [ 134.079478] livepatch: 'test_klp_state2': initializing patching transition [ 134.079498] test_klp_state2: pre_patch_callback: vmlinux [ 134.079499] test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel [ 134.079501] livepatch: 'test_klp_state2': starting patching transition [ 135.587306] livepatch: 'test_klp_state2': completing patching transition [ 135.587415] test_klp_state2: post_patch_callback: vmlinux [ 135.587417] test_klp_state2: fix_console_loglevel: fixing console_loglevel [ 135.587418] livepatch: 'test_klp_state2': patching complete [ 135.606549] % modprobe test_klp_state [ 135.608261] livepatch: Livepatch patch (test_klp_state) is not compatible with the already installed livepatches. [ 135.736937] modprobe: ERROR: could not insert 'test_klp_state': Invalid argument [ 135.736975] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 135.736992] livepatch: 'test_klp_state2': initializing unpatching transition [ 135.737013] test_klp_state2: pre_unpatch_callback: vmlinux [ 135.737014] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 135.737015] livepatch: 'test_klp_state2': starting unpatching transition [ 136.947325] livepatch: 'test_klp_state2': completing unpatching transition [ 136.947481] test_klp_state2: post_unpatch_callback: vmlinux [ 136.947482] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 136.947483] livepatch: 'test_klp_state2': unpatching complete [ 136.948539] % rmmod test_klp_state2 [ 137.041414] livepatch: kernel.ftrace_enabled = 1 [ 137.049296] ===== TEST: livepatch interaction with ftrace_enabled sysctl ===== [ 137.051220] livepatch: kernel.ftrace_enabled = 0 [ 137.051281] % modprobe test_klp_livepatch [ 137.052860] livepatch: enabling patch 'test_klp_livepatch' [ 137.052862] livepatch: 'test_klp_livepatch': initializing patching transition [ 137.052885] livepatch: failed to register ftrace handler for function 'cmdline_proc_show' (-16) [ 137.052887] livepatch: failed to patch object 'vmlinux' [ 137.052888] livepatch: failed to enable patch 'test_klp_livepatch' [ 137.052889] livepatch: 'test_klp_livepatch': canceling patching transition, going to unpatch [ 137.052890] livepatch: 'test_klp_livepatch': completing unpatching transition [ 137.052996] livepatch: 'test_klp_livepatch': unpatching complete [ 137.176943] modprobe: ERROR: could not insert 'test_klp_livepatch': Device or resource busy [ 137.178976] livepatch: kernel.ftrace_enabled = 1 [ 137.182231] % modprobe test_klp_livepatch [ 137.183760] livepatch: enabling patch 'test_klp_livepatch' [ 137.183762] livepatch: 'test_klp_livepatch': initializing patching transition [ 137.184843] livepatch: 'test_klp_livepatch': starting patching transition [ 138.067403] livepatch: 'test_klp_livepatch': completing patching transition [ 138.067507] livepatch: 'test_klp_livepatch': patching complete [ 138.105610] livepatch: sysctl: setting key "kernel.ftrace_enabled": Device or resource busy [ 138.106627] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 138.106648] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 138.106672] livepatch: 'test_klp_livepatch': starting unpatching transition [ 139.107365] livepatch: 'test_klp_livepatch': completing unpatching transition [ 139.108879] livepatch: 'test_klp_livepatch': unpatching complete [ 139.116355] % rmmod test_klp_livepatch [ 139.200586] livepatch: kernel.ftrace_enabled = 1 [ 139.208530] ===== TEST: sysfs test ===== [ 139.211756] % modprobe test_klp_livepatch [ 139.213178] livepatch: enabling patch 'test_klp_livepatch' [ 139.213180] livepatch: 'test_klp_livepatch': initializing patching transition [ 139.214331] livepatch: 'test_klp_livepatch': starting patching transition [ 140.867306] livepatch: 'test_klp_livepatch': completing patching transition [ 140.867409] livepatch: 'test_klp_livepatch': patching complete [ 140.953991] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 140.954006] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 140.954028] livepatch: 'test_klp_livepatch': starting unpatching transition [ 141.997333] livepatch: 'test_klp_livepatch': completing unpatching transition [ 141.998940] livepatch: 'test_klp_livepatch': unpatching complete [ 142.064873] % rmmod test_klp_livepatch [ 142.144542] ===== TEST: sysfs test object/patched ===== [ 142.147844] % modprobe test_klp_callbacks_demo [ 142.149314] livepatch: enabling patch 'test_klp_callbacks_demo' [ 142.149316] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 142.149336] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 142.149337] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 143.027295] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 143.027399] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 143.027400] livepatch: 'test_klp_callbacks_demo': patching complete [ 143.071068] % modprobe test_klp_callbacks_mod [ 143.072452] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 143.072454] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 143.072456] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 143.072497] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 143.074775] % rmmod test_klp_callbacks_mod [ 143.076064] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 143.076077] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 143.076079] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 143.076081] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 143.137979] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 143.138015] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 143.138036] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 143.138038] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 144.147343] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 144.147528] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 144.147530] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 144.249115] % rmmod test_klp_callbacks_demo [ 149.652836] livepatch: kernel.ftrace_enabled = 1 [ 149.660651] ===== TEST: basic function patching ===== [ 149.663714] % modprobe test_klp_livepatch [ 149.665324] livepatch: enabling patch 'test_klp_livepatch' [ 149.665326] livepatch: 'test_klp_livepatch': initializing patching transition [ 149.666432] livepatch: 'test_klp_livepatch': starting patching transition [ 151.027254] livepatch: 'test_klp_livepatch': completing patching transition [ 151.027390] livepatch: 'test_klp_livepatch': patching complete [ 151.092898] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 151.092917] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 151.092934] livepatch: 'test_klp_livepatch': starting unpatching transition [ 152.067265] livepatch: 'test_klp_livepatch': completing unpatching transition [ 152.068794] livepatch: 'test_klp_livepatch': unpatching complete [ 152.102901] % rmmod test_klp_livepatch [ 152.175346] ===== TEST: multiple livepatches ===== [ 152.178402] % modprobe test_klp_livepatch [ 152.179854] livepatch: enabling patch 'test_klp_livepatch' [ 152.179857] livepatch: 'test_klp_livepatch': initializing patching transition [ 152.181052] livepatch: 'test_klp_livepatch': starting patching transition [ 153.587227] livepatch: 'test_klp_livepatch': completing patching transition [ 153.587346] livepatch: 'test_klp_livepatch': patching complete [ 153.605914] test_klp_livepatch: this has been live patched [ 153.610106] % modprobe test_klp_atomic_replace replace=0 [ 153.611743] livepatch: enabling patch 'test_klp_atomic_replace' [ 153.611746] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 153.612988] livepatch: 'test_klp_atomic_replace': starting patching transition [ 154.867269] livepatch: 'test_klp_atomic_replace': completing patching transition [ 154.867427] livepatch: 'test_klp_atomic_replace': patching complete [ 154.936390] test_klp_livepatch: this has been live patched [ 154.937249] test_klp_atomic_replace: this has been live patched [ 154.937424] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 154.937443] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 154.937463] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 156.067196] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 156.068608] livepatch: 'test_klp_atomic_replace': unpatching complete [ 156.148189] % rmmod test_klp_atomic_replace [ 156.197593] test_klp_livepatch: this has been live patched [ 156.198534] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 156.198551] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 156.198569] livepatch: 'test_klp_livepatch': starting unpatching transition [ 157.027245] livepatch: 'test_klp_livepatch': completing unpatching transition [ 157.028678] livepatch: 'test_klp_livepatch': unpatching complete [ 157.107307] % rmmod test_klp_livepatch [ 157.196290] ===== TEST: atomic replace livepatch ===== [ 157.199586] % modprobe test_klp_livepatch [ 157.201016] livepatch: enabling patch 'test_klp_livepatch' [ 157.201018] livepatch: 'test_klp_livepatch': initializing patching transition [ 157.202113] livepatch: 'test_klp_livepatch': starting patching transition [ 159.027189] livepatch: 'test_klp_livepatch': completing patching transition [ 159.027295] livepatch: 'test_klp_livepatch': patching complete [ 159.033053] test_klp_livepatch: this has been live patched [ 159.037594] % modprobe test_klp_atomic_replace replace=1 [ 159.039272] livepatch: enabling patch 'test_klp_atomic_replace' [ 159.039274] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 159.040394] livepatch: 'test_klp_atomic_replace': starting patching transition [ 160.627247] livepatch: 'test_klp_atomic_replace': completing patching transition [ 160.628733] livepatch: 'test_klp_atomic_replace': patching complete [ 160.669276] test_klp_atomic_replace: this has been live patched [ 160.670250] % rmmod test_klp_livepatch [ 160.728472] test_klp_atomic_replace: this has been live patched [ 160.728578] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 160.728647] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 160.728675] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 162.067222] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 162.068711] livepatch: 'test_klp_atomic_replace': unpatching complete [ 162.140945] % rmmod test_klp_atomic_replace [ 162.231887] livepatch: kernel.ftrace_enabled = 1 [ 162.239588] ===== TEST: target module before livepatch ===== [ 162.242938] % modprobe test_klp_callbacks_mod [ 162.244287] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 162.247833] % modprobe test_klp_callbacks_demo [ 162.249367] livepatch: enabling patch 'test_klp_callbacks_demo' [ 162.249369] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 162.249388] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 162.249389] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 162.249406] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 163.747295] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 163.747452] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 163.747454] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 163.747456] livepatch: 'test_klp_callbacks_demo': patching complete [ 163.776543] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 163.776563] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 163.776586] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 163.776587] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 163.776589] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 165.027266] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 165.027372] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 165.027374] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 165.027375] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 165.088636] % rmmod test_klp_callbacks_demo [ 165.147720] % rmmod test_klp_callbacks_mod [ 165.148920] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 165.243998] ===== TEST: module_coming notifier ===== [ 165.247169] % modprobe test_klp_callbacks_demo [ 165.248711] livepatch: enabling patch 'test_klp_callbacks_demo' [ 165.248713] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 165.248734] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 165.248735] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 166.707205] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 166.707378] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 166.707380] livepatch: 'test_klp_callbacks_demo': patching complete [ 166.778763] % modprobe test_klp_callbacks_mod [ 166.780198] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 166.780201] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 166.780203] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 166.780245] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 166.780610] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 166.780628] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 166.780649] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 166.780650] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 166.780652] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 168.067171] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 168.067288] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 168.067289] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 168.067291] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 168.092769] % rmmod test_klp_callbacks_demo [ 168.137636] % rmmod test_klp_callbacks_mod [ 168.138733] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 168.214554] ===== TEST: module_going notifier ===== [ 168.217657] % modprobe test_klp_callbacks_mod [ 168.219088] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 168.222668] % modprobe test_klp_callbacks_demo [ 168.224189] livepatch: enabling patch 'test_klp_callbacks_demo' [ 168.224190] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 168.224209] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 168.224210] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 168.224211] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 169.027192] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 169.027294] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 169.027296] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 169.027297] livepatch: 'test_klp_callbacks_demo': patching complete [ 169.039955] % rmmod test_klp_callbacks_mod [ 169.041211] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 169.041225] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 169.041227] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 169.041229] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 169.096825] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 169.096842] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 169.096860] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 169.096861] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 170.067135] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 170.067237] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 170.067239] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 170.106247] % rmmod test_klp_callbacks_demo [ 170.184203] ===== TEST: module_coming and module_going notifiers ===== [ 170.187291] % modprobe test_klp_callbacks_demo [ 170.188838] livepatch: enabling patch 'test_klp_callbacks_demo' [ 170.188840] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 170.188861] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 170.188862] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 171.837198] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 171.837326] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 171.837328] livepatch: 'test_klp_callbacks_demo': patching complete [ 171.921732] % modprobe test_klp_callbacks_mod [ 171.923091] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 171.923094] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 171.923096] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 171.923138] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 171.924441] % rmmod test_klp_callbacks_mod [ 171.925535] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 171.925548] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 171.925550] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 171.925551] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 171.966871] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 171.966889] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 171.966909] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 171.966910] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 173.027199] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 173.027354] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 173.027355] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 173.076841] % rmmod test_klp_callbacks_demo [ 173.144067] ===== TEST: target module not present ===== [ 173.147097] % modprobe test_klp_callbacks_demo [ 173.148676] livepatch: enabling patch 'test_klp_callbacks_demo' [ 173.148678] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 173.148717] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 173.148719] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 174.627151] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 174.627256] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 174.627257] livepatch: 'test_klp_callbacks_demo': patching complete [ 174.675094] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 174.675112] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 174.675133] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 174.675134] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 176.067150] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 176.067252] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 176.067253] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 176.088083] % rmmod test_klp_callbacks_demo [ 176.194636] ===== TEST: pre-patch callback -ENODEV ===== [ 176.197807] % modprobe test_klp_callbacks_mod [ 176.199160] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 176.199520] % modprobe test_klp_callbacks_demo pre_patch_ret=-19 [ 176.201031] livepatch: enabling patch 'test_klp_callbacks_demo' [ 176.201033] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 176.201061] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 176.201062] livepatch: pre-patch callback failed for object 'vmlinux' [ 176.201063] livepatch: failed to enable patch 'test_klp_callbacks_demo' [ 176.201064] livepatch: 'test_klp_callbacks_demo': canceling patching transition, going to unpatch [ 176.201079] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 176.201187] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 176.346872] modprobe: ERROR: could not insert 'test_klp_callbacks_demo': No such device [ 176.347900] % rmmod test_klp_callbacks_mod [ 176.349044] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 176.424402] ===== TEST: module_coming + pre-patch callback -ENODEV ===== [ 176.427567] % modprobe test_klp_callbacks_demo [ 176.429103] livepatch: enabling patch 'test_klp_callbacks_demo' [ 176.429105] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 176.429125] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 176.429126] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 177.667156] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 177.667260] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 177.667261] livepatch: 'test_klp_callbacks_demo': patching complete [ 177.753119] % echo -19 > /sys/module/test_klp_callbacks_demo/parameters/pre_patch_ret [ 177.754056] % modprobe test_klp_callbacks_mod [ 177.755378] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 177.755381] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 177.755383] livepatch: pre-patch callback failed for object 'test_klp_callbacks_mod' [ 177.755385] livepatch: patch 'test_klp_callbacks_demo' failed for module 'test_klp_callbacks_mod', refusing to load module 'test_klp_callbacks_mod' [ 177.846782] modprobe: ERROR: could not insert 'test_klp_callbacks_mod': No such device [ 177.846853] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 177.846869] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 177.846891] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 177.846892] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 179.027108] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 179.027212] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 179.027214] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 179.058400] % rmmod test_klp_callbacks_demo [ 179.124598] ===== TEST: multiple target modules ===== [ 179.127765] % modprobe test_klp_callbacks_busy block_transition=N [ 179.129305] test_klp_callbacks_busy: test_klp_callbacks_busy_init [ 179.129311] test_klp_callbacks_busy: busymod_work_func enter [ 179.129313] test_klp_callbacks_busy: busymod_work_func exit [ 179.132729] % modprobe test_klp_callbacks_demo [ 179.134243] livepatch: enabling patch 'test_klp_callbacks_demo' [ 179.134247] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 179.134267] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 179.134268] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 179.135680] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 180.947100] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 180.947201] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 180.947203] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 180.947204] livepatch: 'test_klp_callbacks_demo': patching complete [ 180.970719] % modprobe test_klp_callbacks_mod [ 180.972226] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 180.972228] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 180.972230] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 180.972273] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 180.973615] % rmmod test_klp_callbacks_mod [ 180.974736] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 180.974748] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 180.974750] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 180.974751] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 181.046824] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 181.046842] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 181.046860] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 181.046861] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 181.046863] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 181.907102] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 181.908849] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 181.908851] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 181.908853] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 181.955928] % rmmod test_klp_callbacks_demo [ 182.057660] % rmmod test_klp_callbacks_busy [ 182.058777] test_klp_callbacks_busy: test_klp_callbacks_busy_exit [ 182.134704] ===== TEST: busy target module ===== [ 182.137780] % modprobe test_klp_callbacks_busy block_transition=Y [ 182.139259] test_klp_callbacks_busy: test_klp_callbacks_busy_init [ 182.139263] test_klp_callbacks_busy: busymod_work_func enter [ 182.142889] % modprobe test_klp_callbacks_demo [ 182.144362] livepatch: enabling patch 'test_klp_callbacks_demo' [ 182.144364] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 182.144382] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 182.144383] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 182.145742] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 182.150873] % modprobe test_klp_callbacks_mod [ 182.152293] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 182.152296] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 182.152339] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 182.153479] % rmmod test_klp_callbacks_mod [ 182.154578] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 182.154591] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 182.154592] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 182.196952] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 182.196973] livepatch: 'test_klp_callbacks_demo': reversing transition from patching to unpatching [ 182.197122] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 184.947083] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 184.948859] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 184.948861] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 184.948862] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 185.020008] % rmmod test_klp_callbacks_demo [ 185.077670] % rmmod test_klp_callbacks_busy [ 185.106398] test_klp_callbacks_busy: busymod_work_func exit [ 185.106407] test_klp_callbacks_busy: test_klp_callbacks_busy_exit [ 185.184323] ===== TEST: multiple livepatches ===== [ 185.187426] % modprobe test_klp_callbacks_demo [ 185.188999] livepatch: enabling patch 'test_klp_callbacks_demo' [ 185.189001] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 185.189021] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 185.189022] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 186.067143] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 186.067283] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 186.067284] livepatch: 'test_klp_callbacks_demo': patching complete [ 186.109240] % modprobe test_klp_callbacks_demo2 [ 186.110881] livepatch: enabling patch 'test_klp_callbacks_demo2' [ 186.110883] livepatch: 'test_klp_callbacks_demo2': initializing patching transition [ 186.110904] test_klp_callbacks_demo2: pre_patch_callback: vmlinux [ 186.110906] livepatch: 'test_klp_callbacks_demo2': starting patching transition [ 187.107240] livepatch: 'test_klp_callbacks_demo2': completing patching transition [ 187.107352] test_klp_callbacks_demo2: post_patch_callback: vmlinux [ 187.107353] livepatch: 'test_klp_callbacks_demo2': patching complete [ 187.129168] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled [ 187.129188] livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition [ 187.129208] test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux [ 187.129209] livepatch: 'test_klp_callbacks_demo2': starting unpatching transition [ 187.987516] livepatch: 'test_klp_callbacks_demo2': completing unpatching transition [ 187.987618] test_klp_callbacks_demo2: post_unpatch_callback: vmlinux [ 187.987620] livepatch: 'test_klp_callbacks_demo2': unpatching complete [ 188.037170] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 188.037188] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 188.037205] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 188.037206] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 189.027062] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 189.027164] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 189.027166] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 189.047265] % rmmod test_klp_callbacks_demo2 [ 189.137664] % rmmod test_klp_callbacks_demo [ 189.224455] ===== TEST: atomic replace ===== [ 189.227586] % modprobe test_klp_callbacks_demo [ 189.229201] livepatch: enabling patch 'test_klp_callbacks_demo' [ 189.229203] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 189.229222] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 189.229224] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 190.067084] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 190.067235] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 190.067237] livepatch: 'test_klp_callbacks_demo': patching complete [ 190.148887] % modprobe test_klp_callbacks_demo2 replace=1 [ 190.150416] livepatch: enabling patch 'test_klp_callbacks_demo2' [ 190.150419] livepatch: 'test_klp_callbacks_demo2': initializing patching transition [ 190.150439] test_klp_callbacks_demo2: pre_patch_callback: vmlinux [ 190.150441] livepatch: 'test_klp_callbacks_demo2': starting patching transition [ 191.747107] livepatch: 'test_klp_callbacks_demo2': completing patching transition [ 191.747218] test_klp_callbacks_demo2: post_patch_callback: vmlinux [ 191.747220] livepatch: 'test_klp_callbacks_demo2': patching complete [ 191.778578] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled [ 191.778598] livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition [ 191.778619] test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux [ 191.778621] livepatch: 'test_klp_callbacks_demo2': starting unpatching transition [ 192.947121] livepatch: 'test_klp_callbacks_demo2': completing unpatching transition [ 192.947227] test_klp_callbacks_demo2: post_unpatch_callback: vmlinux [ 192.947229] livepatch: 'test_klp_callbacks_demo2': unpatching complete [ 192.989892] % rmmod test_klp_callbacks_demo2 [ 193.057940] % rmmod test_klp_callbacks_demo [ 193.160197] livepatch: kernel.ftrace_enabled = 1 [ 193.167730] ===== TEST: basic shadow variable API ===== [ 193.170833] % modprobe test_klp_shadow_vars [ 193.172209] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 [ 193.172211] test_klp_shadow_vars: got expected NULL result [ 193.172213] test_klp_shadow_vars: shadow_ctor: PTR3 -> PTR2 [ 193.172214] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 [ 193.172217] test_klp_shadow_vars: shadow_ctor: PTR6 -> PTR5 [ 193.172218] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR1, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR5 = PTR6 [ 193.172220] test_klp_shadow_vars: shadow_ctor: PTR8 -> PTR7 [ 193.172221] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 [ 193.172224] test_klp_shadow_vars: shadow_ctor: PTR11 -> PTR10 [ 193.172225] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR10 = PTR11 [ 193.172227] test_klp_shadow_vars: shadow_ctor: PTR13 -> PTR12 [ 193.172229] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 [ 193.172231] test_klp_shadow_vars: shadow_ctor: PTR16 -> PTR15 [ 193.172232] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR14, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR15 = PTR16 [ 193.172234] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR3 [ 193.172236] test_klp_shadow_vars: got expected PTR3 -> PTR2 result [ 193.172237] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 [ 193.172238] test_klp_shadow_vars: got expected PTR6 -> PTR5 result [ 193.172239] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR8 [ 193.172240] test_klp_shadow_vars: got expected PTR8 -> PTR7 result [ 193.172241] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 [ 193.172243] test_klp_shadow_vars: got expected PTR11 -> PTR10 result [ 193.172244] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR13 [ 193.172245] test_klp_shadow_vars: got expected PTR13 -> PTR12 result [ 193.172246] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 [ 193.172247] test_klp_shadow_vars: got expected PTR16 -> PTR15 result [ 193.172249] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 [ 193.172251] test_klp_shadow_vars: got expected PTR3 -> PTR2 result [ 193.172252] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 [ 193.172254] test_klp_shadow_vars: got expected PTR8 -> PTR7 result [ 193.172255] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 [ 193.172257] test_klp_shadow_vars: got expected PTR13 -> PTR12 result [ 193.172258] test_klp_shadow_vars: shadow_dtor(obj=PTR1, shadow_data=PTR3) [ 193.172260] test_klp_shadow_vars: klp_shadow_free(obj=PTR1, id=0x1234, dtor=PTR17) [ 193.172261] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 [ 193.172262] test_klp_shadow_vars: got expected NULL result [ 193.172263] test_klp_shadow_vars: shadow_dtor(obj=PTR9, shadow_data=PTR8) [ 193.172265] test_klp_shadow_vars: klp_shadow_free(obj=PTR9, id=0x1234, dtor=PTR17) [ 193.172266] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR0 [ 193.172267] test_klp_shadow_vars: got expected NULL result [ 193.172268] test_klp_shadow_vars: shadow_dtor(obj=PTR14, shadow_data=PTR13) [ 193.172269] test_klp_shadow_vars: klp_shadow_free(obj=PTR14, id=0x1234, dtor=PTR17) [ 193.172270] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR0 [ 193.172271] test_klp_shadow_vars: got expected NULL result [ 193.172272] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 [ 193.172274] test_klp_shadow_vars: got expected PTR6 -> PTR5 result [ 193.172275] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 [ 193.172276] test_klp_shadow_vars: got expected PTR11 -> PTR10 result [ 193.172277] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 [ 193.172278] test_klp_shadow_vars: got expected PTR16 -> PTR15 result [ 193.172287] test_klp_shadow_vars: klp_shadow_free_all(id=0x1235, dtor=PTR0) [ 193.172288] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR0 [ 193.172289] test_klp_shadow_vars: got expected NULL result [ 193.172290] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR0 [ 193.172291] test_klp_shadow_vars: got expected NULL result [ 193.172292] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR0 [ 193.172293] test_klp_shadow_vars: got expected NULL result [ 193.173588] % rmmod test_klp_shadow_vars [ 193.270211] livepatch: kernel.ftrace_enabled = 1 [ 193.277772] ===== TEST: system state modification ===== [ 193.280982] % modprobe test_klp_state [ 193.282421] livepatch: enabling patch 'test_klp_state' [ 193.282422] livepatch: 'test_klp_state': initializing patching transition [ 193.282443] test_klp_state: pre_patch_callback: vmlinux [ 193.282444] test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel [ 193.282445] livepatch: 'test_klp_state': starting patching transition [ 194.627016] livepatch: 'test_klp_state': completing patching transition [ 194.627121] test_klp_state: post_patch_callback: vmlinux [ 194.627122] test_klp_state: fix_console_loglevel: fixing console_loglevel [ 194.627123] livepatch: 'test_klp_state': patching complete [ 194.707923] % echo 0 > /sys/kernel/livepatch/test_klp_state/enabled [ 194.707943] livepatch: 'test_klp_state': initializing unpatching transition [ 194.707962] test_klp_state: pre_unpatch_callback: vmlinux [ 194.707963] test_klp_state: restore_console_loglevel: restoring console_loglevel [ 194.707964] livepatch: 'test_klp_state': starting unpatching transition [ 195.667037] livepatch: 'test_klp_state': completing unpatching transition [ 195.667141] test_klp_state: post_unpatch_callback: vmlinux [ 195.667143] test_klp_state: free_loglevel_state: freeing space for the stored console_loglevel [ 195.667144] livepatch: 'test_klp_state': unpatching complete [ 195.718014] % rmmod test_klp_state [ 195.794830] ===== TEST: taking over system state modification ===== [ 195.797971] % modprobe test_klp_state [ 195.799572] livepatch: enabling patch 'test_klp_state' [ 195.799574] livepatch: 'test_klp_state': initializing patching transition [ 195.799595] test_klp_state: pre_patch_callback: vmlinux [ 195.799596] test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel [ 195.799598] livepatch: 'test_klp_state': starting patching transition [ 196.867056] livepatch: 'test_klp_state': completing patching transition [ 196.867162] test_klp_state: post_patch_callback: vmlinux [ 196.867164] test_klp_state: fix_console_loglevel: fixing console_loglevel [ 196.867165] livepatch: 'test_klp_state': patching complete [ 196.922499] % modprobe test_klp_state2 [ 196.924010] livepatch: enabling patch 'test_klp_state2' [ 196.924012] livepatch: 'test_klp_state2': initializing patching transition [ 196.924032] test_klp_state2: pre_patch_callback: vmlinux [ 196.924033] test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated [ 196.924034] livepatch: 'test_klp_state2': starting patching transition [ 198.627070] livepatch: 'test_klp_state2': completing patching transition [ 198.627227] test_klp_state2: post_patch_callback: vmlinux [ 198.627229] test_klp_state2: fix_console_loglevel: taking over the console_loglevel change [ 198.627230] livepatch: 'test_klp_state2': patching complete [ 198.654169] % rmmod test_klp_state [ 198.696775] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 198.696796] livepatch: 'test_klp_state2': initializing unpatching transition [ 198.696818] test_klp_state2: pre_unpatch_callback: vmlinux [ 198.696820] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 198.696821] livepatch: 'test_klp_state2': starting unpatching transition [ 199.667041] livepatch: 'test_klp_state2': completing unpatching transition [ 199.667222] test_klp_state2: post_unpatch_callback: vmlinux [ 199.667223] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 199.667224] livepatch: 'test_klp_state2': unpatching complete [ 199.706641] % rmmod test_klp_state2 [ 199.794709] ===== TEST: compatible cumulative livepatches ===== [ 199.797951] % modprobe test_klp_state2 [ 199.799497] livepatch: enabling patch 'test_klp_state2' [ 199.799500] livepatch: 'test_klp_state2': initializing patching transition [ 199.799521] test_klp_state2: pre_patch_callback: vmlinux [ 199.799522] test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel [ 199.799524] livepatch: 'test_klp_state2': starting patching transition [ 200.707033] livepatch: 'test_klp_state2': completing patching transition [ 200.707156] test_klp_state2: post_patch_callback: vmlinux [ 200.707158] test_klp_state2: fix_console_loglevel: fixing console_loglevel [ 200.707159] livepatch: 'test_klp_state2': patching complete [ 200.719453] % modprobe test_klp_state3 [ 200.721036] livepatch: enabling patch 'test_klp_state3' [ 200.721040] livepatch: 'test_klp_state3': initializing patching transition [ 200.721063] test_klp_state3: pre_patch_callback: vmlinux [ 200.721064] test_klp_state3: allocate_loglevel_state: space to store console_loglevel already allocated [ 200.721065] livepatch: 'test_klp_state3': starting patching transition [ 201.667030] livepatch: 'test_klp_state3': completing patching transition [ 201.667132] test_klp_state3: post_patch_callback: vmlinux [ 201.667134] test_klp_state3: fix_console_loglevel: taking over the console_loglevel change [ 201.667135] livepatch: 'test_klp_state3': patching complete [ 201.740654] % rmmod test_klp_state2 [ 201.790108] % modprobe test_klp_state2 [ 201.791613] livepatch: enabling patch 'test_klp_state2' [ 201.791616] livepatch: 'test_klp_state2': initializing patching transition [ 201.791636] test_klp_state2: pre_patch_callback: vmlinux [ 201.791637] test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated [ 201.791639] livepatch: 'test_klp_state2': starting patching transition [ 202.947001] livepatch: 'test_klp_state2': completing patching transition [ 202.947134] test_klp_state2: post_patch_callback: vmlinux [ 202.947136] test_klp_state2: fix_console_loglevel: taking over the console_loglevel change [ 202.947137] livepatch: 'test_klp_state2': patching complete [ 203.013457] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 203.013476] livepatch: 'test_klp_state2': initializing unpatching transition [ 203.013497] test_klp_state2: pre_unpatch_callback: vmlinux [ 203.013498] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 203.013499] livepatch: 'test_klp_state2': starting unpatching transition [ 204.627021] livepatch: 'test_klp_state2': completing unpatching transition [ 204.627127] test_klp_state2: post_unpatch_callback: vmlinux [ 204.627128] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 204.627130] livepatch: 'test_klp_state2': unpatching complete [ 204.628240] % rmmod test_klp_state2 [ 204.677492] % rmmod test_klp_state3 [ 204.754498] ===== TEST: incompatible cumulative livepatches ===== [ 204.757803] % modprobe test_klp_state2 [ 204.759469] livepatch: enabling patch 'test_klp_state2' [ 204.759471] livepatch: 'test_klp_state2': initializing patching transition [ 204.759509] test_klp_state2: pre_patch_callback: vmlinux [ 204.759511] test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel [ 204.759512] livepatch: 'test_klp_state2': starting patching transition [ 205.667054] livepatch: 'test_klp_state2': completing patching transition [ 205.667221] test_klp_state2: post_patch_callback: vmlinux [ 205.667223] test_klp_state2: fix_console_loglevel: fixing console_loglevel [ 205.667224] livepatch: 'test_klp_state2': patching complete [ 205.676418] % modprobe test_klp_state [ 205.678021] livepatch: Livepatch patch (test_klp_state) is not compatible with the already installed livepatches. [ 205.796666] modprobe: ERROR: could not insert 'test_klp_state': Invalid argument [ 205.796711] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 205.796727] livepatch: 'test_klp_state2': initializing unpatching transition [ 205.796748] test_klp_state2: pre_unpatch_callback: vmlinux [ 205.796749] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 205.796750] livepatch: 'test_klp_state2': starting unpatching transition [ 206.627024] livepatch: 'test_klp_state2': completing unpatching transition [ 206.627126] test_klp_state2: post_unpatch_callback: vmlinux [ 206.627127] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 206.627128] livepatch: 'test_klp_state2': unpatching complete [ 206.705649] % rmmod test_klp_state2 [ 206.799832] livepatch: kernel.ftrace_enabled = 1 [ 206.807523] ===== TEST: livepatch interaction with ftrace_enabled sysctl ===== [ 206.809453] livepatch: kernel.ftrace_enabled = 0 [ 206.809519] % modprobe test_klp_livepatch [ 206.811132] livepatch: enabling patch 'test_klp_livepatch' [ 206.811134] livepatch: 'test_klp_livepatch': initializing patching transition [ 206.811157] livepatch: failed to register ftrace handler for function 'cmdline_proc_show' (-16) [ 206.811159] livepatch: failed to patch object 'vmlinux' [ 206.811160] livepatch: failed to enable patch 'test_klp_livepatch' [ 206.811161] livepatch: 'test_klp_livepatch': canceling patching transition, going to unpatch [ 206.811162] livepatch: 'test_klp_livepatch': completing unpatching transition [ 206.811267] livepatch: 'test_klp_livepatch': unpatching complete [ 206.946752] modprobe: ERROR: could not insert 'test_klp_livepatch': Device or resource busy [ 206.948665] livepatch: kernel.ftrace_enabled = 1 [ 206.951864] % modprobe test_klp_livepatch [ 206.953500] livepatch: enabling patch 'test_klp_livepatch' [ 206.953502] livepatch: 'test_klp_livepatch': initializing patching transition [ 206.954621] livepatch: 'test_klp_livepatch': starting patching transition [ 208.147074] livepatch: 'test_klp_livepatch': completing patching transition [ 208.147180] livepatch: 'test_klp_livepatch': patching complete [ 208.181130] livepatch: sysctl: setting key "kernel.ftrace_enabled": Device or resource busy [ 208.182202] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 208.182223] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 208.182241] livepatch: 'test_klp_livepatch': starting unpatching transition [ 209.106989] livepatch: 'test_klp_livepatch': completing unpatching transition [ 209.108516] livepatch: 'test_klp_livepatch': unpatching complete [ 209.192468] % rmmod test_klp_livepatch [ 209.269412] livepatch: kernel.ftrace_enabled = 1 [ 209.277289] ===== TEST: sysfs test ===== [ 209.280562] % modprobe test_klp_livepatch [ 209.282041] livepatch: enabling patch 'test_klp_livepatch' [ 209.282043] livepatch: 'test_klp_livepatch': initializing patching transition [ 209.283130] livepatch: 'test_klp_livepatch': starting patching transition [ 210.946994] livepatch: 'test_klp_livepatch': completing patching transition [ 210.947096] livepatch: 'test_klp_livepatch': patching complete [ 211.020069] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 211.020084] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 211.020103] livepatch: 'test_klp_livepatch': starting unpatching transition [ 211.906955] livepatch: 'test_klp_livepatch': completing unpatching transition [ 211.908429] livepatch: 'test_klp_livepatch': unpatching complete [ 211.928959] % rmmod test_klp_livepatch [ 212.004690] ===== TEST: sysfs test object/patched ===== [ 212.007954] % modprobe test_klp_callbacks_demo [ 212.009626] livepatch: enabling patch 'test_klp_callbacks_demo' [ 212.009628] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 212.009649] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 212.009650] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 213.106985] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 213.107148] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 213.107150] livepatch: 'test_klp_callbacks_demo': patching complete [ 213.133983] % modprobe test_klp_callbacks_mod [ 213.135432] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 213.135434] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 213.135436] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 213.135478] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 213.137671] % rmmod test_klp_callbacks_mod [ 213.138782] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 213.138796] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 213.138798] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 213.138799] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 213.187620] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 213.187639] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 213.187660] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 213.187661] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 214.956966] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 214.957069] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 214.957070] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 215.004034] % rmmod test_klp_callbacks_demo [ 216.486413] livepatch: kernel.ftrace_enabled = 1 [ 216.494184] ===== TEST: basic function patching ===== [ 216.497478] % modprobe test_klp_livepatch [ 216.499123] livepatch: enabling patch 'test_klp_livepatch' [ 216.499125] livepatch: 'test_klp_livepatch': initializing patching transition [ 216.500232] livepatch: 'test_klp_livepatch': starting patching transition [ 217.906980] livepatch: 'test_klp_livepatch': completing patching transition [ 217.907138] livepatch: 'test_klp_livepatch': patching complete [ 217.927548] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 217.927569] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 217.927590] livepatch: 'test_klp_livepatch': starting unpatching transition [ 218.947043] livepatch: 'test_klp_livepatch': completing unpatching transition [ 218.948644] livepatch: 'test_klp_livepatch': unpatching complete [ 219.038726] % rmmod test_klp_livepatch [ 219.115033] ===== TEST: multiple livepatches ===== [ 219.118186] % modprobe test_klp_livepatch [ 219.119788] livepatch: enabling patch 'test_klp_livepatch' [ 219.119790] livepatch: 'test_klp_livepatch': initializing patching transition [ 219.120986] livepatch: 'test_klp_livepatch': starting patching transition [ 220.866989] livepatch: 'test_klp_livepatch': completing patching transition [ 220.867145] livepatch: 'test_klp_livepatch': patching complete [ 220.952783] test_klp_livepatch: this has been live patched [ 220.957044] % modprobe test_klp_atomic_replace replace=0 [ 220.958580] livepatch: enabling patch 'test_klp_atomic_replace' [ 220.958582] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 220.959660] livepatch: 'test_klp_atomic_replace': starting patching transition [ 221.826984] livepatch: 'test_klp_atomic_replace': completing patching transition [ 221.827087] livepatch: 'test_klp_atomic_replace': patching complete [ 221.877823] test_klp_livepatch: this has been live patched [ 221.878665] test_klp_atomic_replace: this has been live patched [ 221.878801] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 221.878822] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 221.878843] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 222.947011] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 222.948465] livepatch: 'test_klp_atomic_replace': unpatching complete [ 222.989788] % rmmod test_klp_atomic_replace [ 223.047531] test_klp_livepatch: this has been live patched [ 223.048613] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 223.048632] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 223.048654] livepatch: 'test_klp_livepatch': starting unpatching transition [ 223.987012] livepatch: 'test_klp_livepatch': completing unpatching transition [ 223.988534] livepatch: 'test_klp_livepatch': unpatching complete [ 224.059000] % rmmod test_klp_livepatch [ 224.156318] ===== TEST: atomic replace livepatch ===== [ 224.159489] % modprobe test_klp_livepatch [ 224.160923] livepatch: enabling patch 'test_klp_livepatch' [ 224.160926] livepatch: 'test_klp_livepatch': initializing patching transition [ 224.162024] livepatch: 'test_klp_livepatch': starting patching transition [ 225.666965] livepatch: 'test_klp_livepatch': completing patching transition [ 225.667118] livepatch: 'test_klp_livepatch': patching complete [ 225.689716] test_klp_livepatch: this has been live patched [ 225.693937] % modprobe test_klp_atomic_replace replace=1 [ 225.695517] livepatch: enabling patch 'test_klp_atomic_replace' [ 225.695519] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 225.696644] livepatch: 'test_klp_atomic_replace': starting patching transition [ 226.786967] livepatch: 'test_klp_atomic_replace': completing patching transition [ 226.788286] livepatch: 'test_klp_atomic_replace': patching complete [ 226.818010] test_klp_atomic_replace: this has been live patched [ 226.819031] % rmmod test_klp_livepatch [ 226.878235] test_klp_atomic_replace: this has been live patched [ 226.878402] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 226.878421] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 226.878443] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 227.907041] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 227.908601] livepatch: 'test_klp_atomic_replace': unpatching complete [ 227.988889] % rmmod test_klp_atomic_replace [ 228.081616] livepatch: kernel.ftrace_enabled = 1 [ 228.089746] ===== TEST: target module before livepatch ===== [ 228.093012] % modprobe test_klp_callbacks_mod [ 228.094389] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 228.097768] % modprobe test_klp_callbacks_demo [ 228.099261] livepatch: enabling patch 'test_klp_callbacks_demo' [ 228.099263] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 228.099286] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 228.099287] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 228.099289] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 229.027084] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 229.027196] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 229.027198] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 229.027199] livepatch: 'test_klp_callbacks_demo': patching complete [ 229.118464] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 229.118483] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 229.118504] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 229.118505] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 229.118506] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 230.866938] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 230.867117] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 230.867118] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 230.867120] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 230.935471] % rmmod test_klp_callbacks_demo [ 230.997625] % rmmod test_klp_callbacks_mod [ 230.998771] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 231.064190] ===== TEST: module_coming notifier ===== [ 231.067155] % modprobe test_klp_callbacks_demo [ 231.068630] livepatch: enabling patch 'test_klp_callbacks_demo' [ 231.068632] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 231.068652] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 231.068653] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 232.786968] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 232.787122] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 232.787123] livepatch: 'test_klp_callbacks_demo': patching complete [ 232.800046] % modprobe test_klp_callbacks_mod [ 232.801418] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 232.801421] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 232.801423] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 232.801465] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 232.801808] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 232.801826] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 232.801848] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 232.801849] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 232.801850] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 233.906995] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 233.907137] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 233.907139] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 233.907140] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 233.912080] % rmmod test_klp_callbacks_demo [ 233.987482] % rmmod test_klp_callbacks_mod [ 233.988644] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 234.064216] ===== TEST: module_going notifier ===== [ 234.067491] % modprobe test_klp_callbacks_mod [ 234.068784] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 234.072123] % modprobe test_klp_callbacks_demo [ 234.073590] livepatch: enabling patch 'test_klp_callbacks_demo' [ 234.073592] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 234.073611] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 234.073613] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 234.073614] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 234.866962] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 234.867066] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 234.867068] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 234.867069] livepatch: 'test_klp_callbacks_demo': patching complete [ 234.889218] % rmmod test_klp_callbacks_mod [ 234.890290] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 234.890303] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 234.890305] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 234.890307] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 234.936640] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 234.936658] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 234.936677] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 234.936678] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 235.906953] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 235.907059] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 235.907060] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 235.946374] % rmmod test_klp_callbacks_demo [ 236.044816] ===== TEST: module_coming and module_going notifiers ===== [ 236.047961] % modprobe test_klp_callbacks_demo [ 236.049483] livepatch: enabling patch 'test_klp_callbacks_demo' [ 236.049485] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 236.049505] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 236.049506] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 236.947000] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 236.947176] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 236.947178] livepatch: 'test_klp_callbacks_demo': patching complete [ 236.969682] % modprobe test_klp_callbacks_mod [ 236.971078] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 236.971080] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 236.971082] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 236.971123] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 236.972339] % rmmod test_klp_callbacks_mod [ 236.973427] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 236.973439] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 236.973441] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 236.973442] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 237.036714] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 237.036732] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 237.036753] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 237.036754] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 237.906936] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 237.907087] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 237.907088] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 237.945408] % rmmod test_klp_callbacks_demo [ 238.024442] ===== TEST: target module not present ===== [ 238.027541] % modprobe test_klp_callbacks_demo [ 238.028922] livepatch: enabling patch 'test_klp_callbacks_demo' [ 238.028925] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 238.028945] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 238.028946] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 239.666976] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 239.667083] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 239.667084] livepatch: 'test_klp_callbacks_demo': patching complete [ 239.757876] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 239.757896] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 239.757916] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 239.757917] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 240.866920] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 240.867056] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 240.867058] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 240.868130] % rmmod test_klp_callbacks_demo [ 240.960617] ERROR: livepatch kselftest(s) failed [ 241.022110] livepatch: kernel.ftrace_enabled = 1 [ 241.029698] ===== TEST: basic shadow variable API ===== [ 241.032978] % modprobe test_klp_shadow_vars [ 241.034446] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 [ 241.034448] test_klp_shadow_vars: got expected NULL result [ 241.034449] test_klp_shadow_vars: shadow_ctor: PTR3 -> PTR2 [ 241.034451] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 [ 241.034454] test_klp_shadow_vars: shadow_ctor: PTR6 -> PTR5 [ 241.034455] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR1, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR5 = PTR6 [ 241.034457] test_klp_shadow_vars: shadow_ctor: PTR8 -> PTR7 [ 241.034459] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 [ 241.034461] test_klp_shadow_vars: shadow_ctor: PTR11 -> PTR10 [ 241.034462] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR10 = PTR11 [ 241.034464] test_klp_shadow_vars: shadow_ctor: PTR13 -> PTR12 [ 241.034466] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 [ 241.034468] test_klp_shadow_vars: shadow_ctor: PTR16 -> PTR15 [ 241.034469] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR14, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR15 = PTR16 [ 241.034471] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR3 [ 241.034473] test_klp_shadow_vars: got expected PTR3 -> PTR2 result [ 241.034474] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 [ 241.034475] test_klp_shadow_vars: got expected PTR6 -> PTR5 result [ 241.034476] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR8 [ 241.034478] test_klp_shadow_vars: got expected PTR8 -> PTR7 result [ 241.034479] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 [ 241.034480] test_klp_shadow_vars: got expected PTR11 -> PTR10 result [ 241.034481] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR13 [ 241.034482] test_klp_shadow_vars: got expected PTR13 -> PTR12 result [ 241.034483] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 [ 241.034485] test_klp_shadow_vars: got expected PTR16 -> PTR15 result [ 241.034486] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 [ 241.034488] test_klp_shadow_vars: got expected PTR3 -> PTR2 result [ 241.034489] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 [ 241.034491] test_klp_shadow_vars: got expected PTR8 -> PTR7 result [ 241.034492] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 [ 241.034494] test_klp_shadow_vars: got expected PTR13 -> PTR12 result [ 241.034496] test_klp_shadow_vars: shadow_dtor(obj=PTR1, shadow_data=PTR3) [ 241.034497] test_klp_shadow_vars: klp_shadow_free(obj=PTR1, id=0x1234, dtor=PTR17) [ 241.034499] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 [ 241.034500] test_klp_shadow_vars: got expected NULL result [ 241.034501] test_klp_shadow_vars: shadow_dtor(obj=PTR9, shadow_data=PTR8) [ 241.034502] test_klp_shadow_vars: klp_shadow_free(obj=PTR9, id=0x1234, dtor=PTR17) [ 241.034503] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR0 [ 241.034505] test_klp_shadow_vars: got expected NULL result [ 241.034505] test_klp_shadow_vars: shadow_dtor(obj=PTR14, shadow_data=PTR13) [ 241.034507] test_klp_shadow_vars: klp_shadow_free(obj=PTR14, id=0x1234, dtor=PTR17) [ 241.034508] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR0 [ 241.034509] test_klp_shadow_vars: got expected NULL result [ 241.034510] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 [ 241.034512] test_klp_shadow_vars: got expected PTR6 -> PTR5 result [ 241.034513] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 [ 241.034514] test_klp_shadow_vars: got expected PTR11 -> PTR10 result [ 241.034515] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 [ 241.034516] test_klp_shadow_vars: got expected PTR16 -> PTR15 result [ 241.034522] test_klp_shadow_vars: klp_shadow_free_all(id=0x1235, dtor=PTR0) [ 241.034523] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR0 [ 241.034524] test_klp_shadow_vars: got expected NULL result [ 241.034525] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR0 [ 241.034526] test_klp_shadow_vars: got expected NULL result [ 241.034527] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR0 [ 241.034528] test_klp_shadow_vars: got expected NULL result [ 241.035837] % rmmod test_klp_shadow_vars [ 241.150238] livepatch: kernel.ftrace_enabled = 1 [ 241.157791] ===== TEST: system state modification ===== [ 241.161055] % modprobe test_klp_state [ 241.162597] livepatch: enabling patch 'test_klp_state' [ 241.162599] livepatch: 'test_klp_state': initializing patching transition [ 241.162624] test_klp_state: pre_patch_callback: vmlinux [ 241.162625] test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel [ 241.162626] livepatch: 'test_klp_state': starting patching transition [ 242.636994] livepatch: 'test_klp_state': completing patching transition [ 242.637119] test_klp_state: post_patch_callback: vmlinux [ 242.637121] test_klp_state: fix_console_loglevel: fixing console_loglevel [ 242.637122] livepatch: 'test_klp_state': patching complete [ 242.690300] % echo 0 > /sys/kernel/livepatch/test_klp_state/enabled [ 242.690318] livepatch: 'test_klp_state': initializing unpatching transition [ 242.690340] test_klp_state: pre_unpatch_callback: vmlinux [ 242.690341] test_klp_state: restore_console_loglevel: restoring console_loglevel [ 242.690342] livepatch: 'test_klp_state': starting unpatching transition [ 243.666983] livepatch: 'test_klp_state': completing unpatching transition [ 243.667104] test_klp_state: post_unpatch_callback: vmlinux [ 243.667105] test_klp_state: free_loglevel_state: freeing space for the stored console_loglevel [ 243.667106] livepatch: 'test_klp_state': unpatching complete [ 243.700880] % rmmod test_klp_state [ 243.774968] ===== TEST: taking over system state modification ===== [ 243.778186] % modprobe test_klp_state [ 243.779642] livepatch: enabling patch 'test_klp_state' [ 243.779645] livepatch: 'test_klp_state': initializing patching transition [ 243.779665] test_klp_state: pre_patch_callback: vmlinux [ 243.779667] test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel [ 243.779668] livepatch: 'test_klp_state': starting patching transition [ 244.707041] livepatch: 'test_klp_state': completing patching transition [ 244.707171] test_klp_state: post_patch_callback: vmlinux [ 244.707172] test_klp_state: fix_console_loglevel: fixing console_loglevel [ 244.707173] livepatch: 'test_klp_state': patching complete [ 244.801759] % modprobe test_klp_state2 [ 244.803222] livepatch: enabling patch 'test_klp_state2' [ 244.803223] livepatch: 'test_klp_state2': initializing patching transition [ 244.803243] test_klp_state2: pre_patch_callback: vmlinux [ 244.803244] test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated [ 244.803245] livepatch: 'test_klp_state2': starting patching transition [ 245.747022] livepatch: 'test_klp_state2': completing patching transition [ 245.747131] test_klp_state2: post_patch_callback: vmlinux [ 245.747133] test_klp_state2: fix_console_loglevel: taking over the console_loglevel change [ 245.747134] livepatch: 'test_klp_state2': patching complete [ 245.822853] % rmmod test_klp_state [ 245.896693] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 245.896711] livepatch: 'test_klp_state2': initializing unpatching transition [ 245.896733] test_klp_state2: pre_unpatch_callback: vmlinux [ 245.896735] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 245.896736] livepatch: 'test_klp_state2': starting unpatching transition [ 247.666976] livepatch: 'test_klp_state2': completing unpatching transition [ 247.667145] test_klp_state2: post_unpatch_callback: vmlinux [ 247.667146] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 247.667147] livepatch: 'test_klp_state2': unpatching complete [ 247.712764] % rmmod test_klp_state2 [ 247.774578] ===== TEST: compatible cumulative livepatches ===== [ 247.777820] % modprobe test_klp_state2 [ 247.779360] livepatch: enabling patch 'test_klp_state2' [ 247.779362] livepatch: 'test_klp_state2': initializing patching transition [ 247.779401] test_klp_state2: pre_patch_callback: vmlinux [ 247.779402] test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel [ 247.779403] livepatch: 'test_klp_state2': starting patching transition [ 248.706971] livepatch: 'test_klp_state2': completing patching transition [ 248.707111] test_klp_state2: post_patch_callback: vmlinux [ 248.707112] test_klp_state2: fix_console_loglevel: fixing console_loglevel [ 248.707114] livepatch: 'test_klp_state2': patching complete [ 248.800628] % modprobe test_klp_state3 [ 248.802120] livepatch: enabling patch 'test_klp_state3' [ 248.802122] livepatch: 'test_klp_state3': initializing patching transition [ 248.802143] test_klp_state3: pre_patch_callback: vmlinux [ 248.802144] test_klp_state3: allocate_loglevel_state: space to store console_loglevel already allocated [ 248.802145] livepatch: 'test_klp_state3': starting patching transition [ 249.747012] livepatch: 'test_klp_state3': completing patching transition [ 249.747117] test_klp_state3: post_patch_callback: vmlinux [ 249.747119] test_klp_state3: fix_console_loglevel: taking over the console_loglevel change [ 249.747120] livepatch: 'test_klp_state3': patching complete [ 249.821681] % rmmod test_klp_state2 [ 249.889775] % modprobe test_klp_state2 [ 249.891292] livepatch: enabling patch 'test_klp_state2' [ 249.891294] livepatch: 'test_klp_state2': initializing patching transition [ 249.891314] test_klp_state2: pre_patch_callback: vmlinux [ 249.891315] test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated [ 249.891317] livepatch: 'test_klp_state2': starting patching transition [ 250.706998] livepatch: 'test_klp_state2': completing patching transition [ 250.707174] test_klp_state2: post_patch_callback: vmlinux [ 250.707176] test_klp_state2: fix_console_loglevel: taking over the console_loglevel change [ 250.707177] livepatch: 'test_klp_state2': patching complete [ 250.808275] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 250.808295] livepatch: 'test_klp_state2': initializing unpatching transition [ 250.808317] test_klp_state2: pre_unpatch_callback: vmlinux [ 250.808318] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 250.808319] livepatch: 'test_klp_state2': starting unpatching transition [ 252.146949] livepatch: 'test_klp_state2': completing unpatching transition [ 252.147137] test_klp_state2: post_unpatch_callback: vmlinux [ 252.147139] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 252.147140] livepatch: 'test_klp_state2': unpatching complete [ 252.221718] % rmmod test_klp_state2 [ 252.267508] % rmmod test_klp_state3 [ 252.344651] ===== TEST: incompatible cumulative livepatches ===== [ 252.347830] % modprobe test_klp_state2 [ 252.349374] livepatch: enabling patch 'test_klp_state2' [ 252.349376] livepatch: 'test_klp_state2': initializing patching transition [ 252.349397] test_klp_state2: pre_patch_callback: vmlinux [ 252.349398] test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel [ 252.349399] livepatch: 'test_klp_state2': starting patching transition [ 253.666985] livepatch: 'test_klp_state2': completing patching transition [ 253.667137] test_klp_state2: post_patch_callback: vmlinux [ 253.667139] test_klp_state2: fix_console_loglevel: fixing console_loglevel [ 253.667140] livepatch: 'test_klp_state2': patching complete [ 253.672445] % modprobe test_klp_state [ 253.673955] livepatch: Livepatch patch (test_klp_state) is not compatible with the already installed livepatches. [ 253.836626] modprobe: ERROR: could not insert 'test_klp_state': Invalid argument [ 253.836711] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 253.836729] livepatch: 'test_klp_state2': initializing unpatching transition [ 253.836751] test_klp_state2: pre_unpatch_callback: vmlinux [ 253.836752] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 253.836753] livepatch: 'test_klp_state2': starting unpatching transition [ 255.107053] livepatch: 'test_klp_state2': completing unpatching transition [ 255.107160] test_klp_state2: post_unpatch_callback: vmlinux [ 255.107162] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 255.107163] livepatch: 'test_klp_state2': unpatching complete [ 255.149006] % rmmod test_klp_state2 [ 255.251724] livepatch: kernel.ftrace_enabled = 1 [ 255.259721] ===== TEST: livepatch interaction with ftrace_enabled sysctl ===== [ 255.261663] livepatch: kernel.ftrace_enabled = 0 [ 255.261800] % modprobe test_klp_livepatch [ 255.263372] livepatch: enabling patch 'test_klp_livepatch' [ 255.263374] livepatch: 'test_klp_livepatch': initializing patching transition [ 255.263397] livepatch: failed to register ftrace handler for function 'cmdline_proc_show' (-16) [ 255.263399] livepatch: failed to patch object 'vmlinux' [ 255.263400] livepatch: failed to enable patch 'test_klp_livepatch' [ 255.263401] livepatch: 'test_klp_livepatch': canceling patching transition, going to unpatch [ 255.263402] livepatch: 'test_klp_livepatch': completing unpatching transition [ 255.263560] livepatch: 'test_klp_livepatch': unpatching complete [ 255.386651] modprobe: ERROR: could not insert 'test_klp_livepatch': Device or resource busy [ 255.388605] livepatch: kernel.ftrace_enabled = 1 [ 255.391657] % modprobe test_klp_livepatch [ 255.393208] livepatch: enabling patch 'test_klp_livepatch' [ 255.393210] livepatch: 'test_klp_livepatch': initializing patching transition [ 255.394450] livepatch: 'test_klp_livepatch': starting patching transition [ 256.786971] livepatch: 'test_klp_livepatch': completing patching transition [ 256.787078] livepatch: 'test_klp_livepatch': patching complete [ 256.823325] livepatch: sysctl: setting key "kernel.ftrace_enabled": Device or resource busy [ 256.824273] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 256.824293] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 256.824311] livepatch: 'test_klp_livepatch': starting unpatching transition [ 257.746928] livepatch: 'test_klp_livepatch': completing unpatching transition [ 257.748446] livepatch: 'test_klp_livepatch': unpatching complete [ 257.833832] % rmmod test_klp_livepatch [ 257.929505] livepatch: kernel.ftrace_enabled = 1 [ 257.936957] ===== TEST: sysfs test ===== [ 257.940220] % modprobe test_klp_livepatch [ 257.941745] livepatch: enabling patch 'test_klp_livepatch' [ 257.941747] livepatch: 'test_klp_livepatch': initializing patching transition [ 257.942869] livepatch: 'test_klp_livepatch': starting patching transition [ 258.946982] livepatch: 'test_klp_livepatch': completing patching transition [ 258.947104] livepatch: 'test_klp_livepatch': patching complete [ 258.969357] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 258.969373] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 258.969393] livepatch: 'test_klp_livepatch': starting unpatching transition [ 260.716963] livepatch: 'test_klp_livepatch': completing unpatching transition [ 260.718450] livepatch: 'test_klp_livepatch': unpatching complete [ 260.785513] % rmmod test_klp_livepatch [ 260.874332] ===== TEST: sysfs test object/patched ===== [ 260.877504] % modprobe test_klp_callbacks_demo [ 260.878941] livepatch: enabling patch 'test_klp_callbacks_demo' [ 260.878943] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 260.878965] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 260.878966] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 261.906924] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 261.907028] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 261.907030] livepatch: 'test_klp_callbacks_demo': patching complete [ 262.003387] % modprobe test_klp_callbacks_mod [ 262.004837] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 262.004839] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 262.004841] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 262.004883] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 262.007085] % rmmod test_klp_callbacks_mod [ 262.008282] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 262.008297] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 262.008299] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 262.008300] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 262.077659] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 262.077679] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 262.077698] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 262.077700] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 263.666952] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 263.667118] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 263.667119] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 263.692467] % rmmod test_klp_callbacks_demo
% modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': patching complete % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo
livepatch: kernel.ftrace_enabled = 1 % modprobe test_klp_livepatch livepatch: enabling patch 'test_klp_livepatch' livepatch: 'test_klp_livepatch': initializing patching transition livepatch: 'test_klp_livepatch': starting patching transition livepatch: 'test_klp_livepatch': completing patching transition livepatch: 'test_klp_livepatch': patching complete % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled livepatch: 'test_klp_livepatch': initializing unpatching transition livepatch: 'test_klp_livepatch': starting unpatching transition livepatch: 'test_klp_livepatch': completing unpatching transition livepatch: 'test_klp_livepatch': unpatching complete % rmmod test_klp_livepatch % modprobe test_klp_livepatch livepatch: enabling patch 'test_klp_livepatch' livepatch: 'test_klp_livepatch': initializing patching transition livepatch: 'test_klp_livepatch': starting patching transition livepatch: 'test_klp_livepatch': completing patching transition livepatch: 'test_klp_livepatch': patching complete test_klp_livepatch: this has been live patched % modprobe test_klp_atomic_replace replace=0 livepatch: enabling patch 'test_klp_atomic_replace' livepatch: 'test_klp_atomic_replace': initializing patching transition livepatch: 'test_klp_atomic_replace': starting patching transition livepatch: 'test_klp_atomic_replace': completing patching transition livepatch: 'test_klp_atomic_replace': patching complete test_klp_livepatch: this has been live patched test_klp_atomic_replace: this has been live patched % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled livepatch: 'test_klp_atomic_replace': initializing unpatching transition livepatch: 'test_klp_atomic_replace': starting unpatching transition livepatch: 'test_klp_atomic_replace': completing unpatching transition livepatch: 'test_klp_atomic_replace': unpatching complete % rmmod test_klp_atomic_replace test_klp_livepatch: this has been live patched % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled livepatch: 'test_klp_livepatch': initializing unpatching transition livepatch: 'test_klp_livepatch': starting unpatching transition livepatch: 'test_klp_livepatch': completing unpatching transition livepatch: 'test_klp_livepatch': unpatching complete % rmmod test_klp_livepatch % modprobe test_klp_livepatch livepatch: enabling patch 'test_klp_livepatch' livepatch: 'test_klp_livepatch': initializing patching transition livepatch: 'test_klp_livepatch': starting patching transition livepatch: 'test_klp_livepatch': completing patching transition livepatch: 'test_klp_livepatch': patching complete test_klp_livepatch: this has been live patched % modprobe test_klp_atomic_replace replace=1 livepatch: enabling patch 'test_klp_atomic_replace' livepatch: 'test_klp_atomic_replace': initializing patching transition livepatch: 'test_klp_atomic_replace': starting patching transition livepatch: 'test_klp_atomic_replace': completing patching transition livepatch: 'test_klp_atomic_replace': patching complete test_klp_atomic_replace: this has been live patched % rmmod test_klp_livepatch test_klp_atomic_replace: this has been live patched % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled livepatch: 'test_klp_atomic_replace': initializing unpatching transition livepatch: 'test_klp_atomic_replace': starting unpatching transition livepatch: 'test_klp_atomic_replace': completing unpatching transition livepatch: 'test_klp_atomic_replace': unpatching complete % rmmod test_klp_atomic_replace livepatch: kernel.ftrace_enabled = 1 % modprobe test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_init % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': patching complete % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo % rmmod test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_exit % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': patching complete % modprobe test_klp_callbacks_mod livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init test_klp_callbacks_mod: test_klp_callbacks_mod_init % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo % rmmod test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_exit % modprobe test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_init % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': patching complete % rmmod test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_exit test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': patching complete % modprobe test_klp_callbacks_mod livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init test_klp_callbacks_mod: test_klp_callbacks_mod_init % rmmod test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_exit test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': patching complete % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo % modprobe test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_init % modprobe test_klp_callbacks_demo pre_patch_ret=-19 livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux livepatch: pre-patch callback failed for object 'vmlinux' livepatch: failed to enable patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': canceling patching transition, going to unpatch livepatch: 'test_klp_callbacks_demo': completing unpatching transition livepatch: 'test_klp_callbacks_demo': unpatching complete modprobe: ERROR: could not insert 'test_klp_callbacks_demo': No such device % rmmod test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_exit % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': patching complete % echo -19 > /sys/module/test_klp_callbacks_demo/parameters/pre_patch_ret % modprobe test_klp_callbacks_mod livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init livepatch: pre-patch callback failed for object 'test_klp_callbacks_mod' livepatch: patch 'test_klp_callbacks_demo' failed for module 'test_klp_callbacks_mod', refusing to load module 'test_klp_callbacks_mod' modprobe: ERROR: could not insert 'test_klp_callbacks_mod': No such device % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo % modprobe test_klp_callbacks_busy block_transition=N test_klp_callbacks_busy: test_klp_callbacks_busy_init test_klp_callbacks_busy: busymod_work_func enter test_klp_callbacks_busy: busymod_work_func exit % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': patching complete % modprobe test_klp_callbacks_mod livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init test_klp_callbacks_mod: test_klp_callbacks_mod_init % rmmod test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_exit test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo % rmmod test_klp_callbacks_busy test_klp_callbacks_busy: test_klp_callbacks_busy_exit % modprobe test_klp_callbacks_busy block_transition=Y test_klp_callbacks_busy: test_klp_callbacks_busy_init test_klp_callbacks_busy: busymod_work_func enter % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': starting patching transition % modprobe test_klp_callbacks_mod livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init test_klp_callbacks_mod: test_klp_callbacks_mod_init % rmmod test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_exit livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': reversing transition from patching to unpatching livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo % rmmod test_klp_callbacks_busy test_klp_callbacks_busy: busymod_work_func exit test_klp_callbacks_busy: test_klp_callbacks_busy_exit % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': patching complete % modprobe test_klp_callbacks_demo2 livepatch: enabling patch 'test_klp_callbacks_demo2' livepatch: 'test_klp_callbacks_demo2': initializing patching transition test_klp_callbacks_demo2: pre_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo2': starting patching transition livepatch: 'test_klp_callbacks_demo2': completing patching transition test_klp_callbacks_demo2: post_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo2': patching complete % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo2': starting unpatching transition livepatch: 'test_klp_callbacks_demo2': completing unpatching transition test_klp_callbacks_demo2: post_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo2': unpatching complete % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo2 % rmmod test_klp_callbacks_demo % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': patching complete % modprobe test_klp_callbacks_demo2 replace=1 livepatch: enabling patch 'test_klp_callbacks_demo2' livepatch: 'test_klp_callbacks_demo2': initializing patching transition test_klp_callbacks_demo2: pre_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo2': starting patching transition livepatch: 'test_klp_callbacks_demo2': completing patching transition test_klp_callbacks_demo2: post_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo2': patching complete % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo2': starting unpatching transition livepatch: 'test_klp_callbacks_demo2': completing unpatching transition test_klp_callbacks_demo2: post_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo2': unpatching complete % rmmod test_klp_callbacks_demo2 % rmmod test_klp_callbacks_demo livepatch: kernel.ftrace_enabled = 1 % modprobe test_klp_shadow_vars test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 test_klp_shadow_vars: got expected NULL result test_klp_shadow_vars: shadow_ctor: PTR3 -> PTR2 test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 test_klp_shadow_vars: shadow_ctor: PTR6 -> PTR5 test_klp_shadow_vars: klp_shadow_alloc(obj=PTR1, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR5 = PTR6 test_klp_shadow_vars: shadow_ctor: PTR8 -> PTR7 test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 test_klp_shadow_vars: shadow_ctor: PTR11 -> PTR10 test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR10 = PTR11 test_klp_shadow_vars: shadow_ctor: PTR13 -> PTR12 test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 test_klp_shadow_vars: shadow_ctor: PTR16 -> PTR15 test_klp_shadow_vars: klp_shadow_alloc(obj=PTR14, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR15 = PTR16 test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR3 test_klp_shadow_vars: got expected PTR3 -> PTR2 result test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 test_klp_shadow_vars: got expected PTR6 -> PTR5 result test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR8 test_klp_shadow_vars: got expected PTR8 -> PTR7 result test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 test_klp_shadow_vars: got expected PTR11 -> PTR10 result test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR13 test_klp_shadow_vars: got expected PTR13 -> PTR12 result test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 test_klp_shadow_vars: got expected PTR16 -> PTR15 result test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 test_klp_shadow_vars: got expected PTR3 -> PTR2 result test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 test_klp_shadow_vars: got expected PTR8 -> PTR7 result test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 test_klp_shadow_vars: got expected PTR13 -> PTR12 result test_klp_shadow_vars: shadow_dtor(obj=PTR1, shadow_data=PTR3) test_klp_shadow_vars: klp_shadow_free(obj=PTR1, id=0x1234, dtor=PTR17) test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 test_klp_shadow_vars: got expected NULL result test_klp_shadow_vars: shadow_dtor(obj=PTR9, shadow_data=PTR8) test_klp_shadow_vars: klp_shadow_free(obj=PTR9, id=0x1234, dtor=PTR17) test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR0 test_klp_shadow_vars: got expected NULL result test_klp_shadow_vars: shadow_dtor(obj=PTR14, shadow_data=PTR13) test_klp_shadow_vars: klp_shadow_free(obj=PTR14, id=0x1234, dtor=PTR17) test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR0 test_klp_shadow_vars: got expected NULL result test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 test_klp_shadow_vars: got expected PTR6 -> PTR5 result test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 test_klp_shadow_vars: got expected PTR11 -> PTR10 result test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 test_klp_shadow_vars: got expected PTR16 -> PTR15 result test_klp_shadow_vars: klp_shadow_free_all(id=0x1235, dtor=PTR0) test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR0 test_klp_shadow_vars: got expected NULL result test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR0 test_klp_shadow_vars: got expected NULL result test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR0 test_klp_shadow_vars: got expected NULL result % rmmod test_klp_shadow_vars livepatch: kernel.ftrace_enabled = 1 % modprobe test_klp_state livepatch: enabling patch 'test_klp_state' livepatch: 'test_klp_state': initializing patching transition test_klp_state: pre_patch_callback: vmlinux test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel livepatch: 'test_klp_state': starting patching transition livepatch: 'test_klp_state': completing patching transition test_klp_state: post_patch_callback: vmlinux test_klp_state: fix_console_loglevel: fixing console_loglevel livepatch: 'test_klp_state': patching complete % echo 0 > /sys/kernel/livepatch/test_klp_state/enabled livepatch: 'test_klp_state': initializing unpatching transition test_klp_state: pre_unpatch_callback: vmlinux test_klp_state: restore_console_loglevel: restoring console_loglevel livepatch: 'test_klp_state': starting unpatching transition livepatch: 'test_klp_state': completing unpatching transition test_klp_state: post_unpatch_callback: vmlinux test_klp_state: free_loglevel_state: freeing space for the stored console_loglevel livepatch: 'test_klp_state': unpatching complete % rmmod test_klp_state % modprobe test_klp_state livepatch: enabling patch 'test_klp_state' livepatch: 'test_klp_state': initializing patching transition test_klp_state: pre_patch_callback: vmlinux test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel livepatch: 'test_klp_state': starting patching transition livepatch: 'test_klp_state': completing patching transition test_klp_state: post_patch_callback: vmlinux test_klp_state: fix_console_loglevel: fixing console_loglevel livepatch: 'test_klp_state': patching complete % modprobe test_klp_state2 livepatch: enabling patch 'test_klp_state2' livepatch: 'test_klp_state2': initializing patching transition test_klp_state2: pre_patch_callback: vmlinux test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated livepatch: 'test_klp_state2': starting patching transition livepatch: 'test_klp_state2': completing patching transition test_klp_state2: post_patch_callback: vmlinux test_klp_state2: fix_console_loglevel: taking over the console_loglevel change livepatch: 'test_klp_state2': patching complete % rmmod test_klp_state % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled livepatch: 'test_klp_state2': initializing unpatching transition test_klp_state2: pre_unpatch_callback: vmlinux test_klp_state2: restore_console_loglevel: restoring console_loglevel livepatch: 'test_klp_state2': starting unpatching transition livepatch: 'test_klp_state2': completing unpatching transition test_klp_state2: post_unpatch_callback: vmlinux test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel livepatch: 'test_klp_state2': unpatching complete % rmmod test_klp_state2 % modprobe test_klp_state2 livepatch: enabling patch 'test_klp_state2' livepatch: 'test_klp_state2': initializing patching transition test_klp_state2: pre_patch_callback: vmlinux test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel livepatch: 'test_klp_state2': starting patching transition livepatch: 'test_klp_state2': completing patching transition test_klp_state2: post_patch_callback: vmlinux test_klp_state2: fix_console_loglevel: fixing console_loglevel livepatch: 'test_klp_state2': patching complete % modprobe test_klp_state3 livepatch: enabling patch 'test_klp_state3' livepatch: 'test_klp_state3': initializing patching transition test_klp_state3: pre_patch_callback: vmlinux test_klp_state3: allocate_loglevel_state: space to store console_loglevel already allocated livepatch: 'test_klp_state3': starting patching transition livepatch: 'test_klp_state3': completing patching transition test_klp_state3: post_patch_callback: vmlinux test_klp_state3: fix_console_loglevel: taking over the console_loglevel change livepatch: 'test_klp_state3': patching complete % rmmod test_klp_state2 % modprobe test_klp_state2 livepatch: enabling patch 'test_klp_state2' livepatch: 'test_klp_state2': initializing patching transition test_klp_state2: pre_patch_callback: vmlinux test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated livepatch: 'test_klp_state2': starting patching transition livepatch: 'test_klp_state2': completing patching transition test_klp_state2: post_patch_callback: vmlinux test_klp_state2: fix_console_loglevel: taking over the console_loglevel change livepatch: 'test_klp_state2': patching complete % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled livepatch: 'test_klp_state2': initializing unpatching transition test_klp_state2: pre_unpatch_callback: vmlinux test_klp_state2: restore_console_loglevel: restoring console_loglevel livepatch: 'test_klp_state2': starting unpatching transition livepatch: 'test_klp_state2': completing unpatching transition test_klp_state2: post_unpatch_callback: vmlinux test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel livepatch: 'test_klp_state2': unpatching complete % rmmod test_klp_state2 % rmmod test_klp_state3 % modprobe test_klp_state2 livepatch: enabling patch 'test_klp_state2' livepatch: 'test_klp_state2': initializing patching transition test_klp_state2: pre_patch_callback: vmlinux test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel livepatch: 'test_klp_state2': starting patching transition livepatch: 'test_klp_state2': completing patching transition test_klp_state2: post_patch_callback: vmlinux test_klp_state2: fix_console_loglevel: fixing console_loglevel livepatch: 'test_klp_state2': patching complete % modprobe test_klp_state livepatch: Livepatch patch (test_klp_state) is not compatible with the already installed livepatches. modprobe: ERROR: could not insert 'test_klp_state': Invalid argument % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled livepatch: 'test_klp_state2': initializing unpatching transition test_klp_state2: pre_unpatch_callback: vmlinux test_klp_state2: restore_console_loglevel: restoring console_loglevel livepatch: 'test_klp_state2': starting unpatching transition livepatch: 'test_klp_state2': completing unpatching transition test_klp_state2: post_unpatch_callback: vmlinux test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel livepatch: 'test_klp_state2': unpatching complete % rmmod test_klp_state2 livepatch: kernel.ftrace_enabled = 1 livepatch: kernel.ftrace_enabled = 0 % modprobe test_klp_livepatch livepatch: enabling patch 'test_klp_livepatch' livepatch: 'test_klp_livepatch': initializing patching transition livepatch: failed to register ftrace handler for function 'cmdline_proc_show' (-16) livepatch: failed to patch object 'vmlinux' livepatch: failed to enable patch 'test_klp_livepatch' livepatch: 'test_klp_livepatch': canceling patching transition, going to unpatch livepatch: 'test_klp_livepatch': completing unpatching transition livepatch: 'test_klp_livepatch': unpatching complete modprobe: ERROR: could not insert 'test_klp_livepatch': Device or resource busy livepatch: kernel.ftrace_enabled = 1 % modprobe test_klp_livepatch livepatch: enabling patch 'test_klp_livepatch' livepatch: 'test_klp_livepatch': initializing patching transition livepatch: 'test_klp_livepatch': starting patching transition livepatch: 'test_klp_livepatch': completing patching transition livepatch: 'test_klp_livepatch': patching complete livepatch: sysctl: setting key "kernel.ftrace_enabled": Device or resource busy % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled livepatch: 'test_klp_livepatch': initializing unpatching transition livepatch: 'test_klp_livepatch': starting unpatching transition livepatch: 'test_klp_livepatch': completing unpatching transition livepatch: 'test_klp_livepatch': unpatching complete % rmmod test_klp_livepatch livepatch: kernel.ftrace_enabled = 1 % modprobe test_klp_livepatch livepatch: enabling patch 'test_klp_livepatch' livepatch: 'test_klp_livepatch': initializing patching transition livepatch: 'test_klp_livepatch': starting patching transition livepatch: 'test_klp_livepatch': completing patching transition livepatch: 'test_klp_livepatch': patching complete % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled livepatch: 'test_klp_livepatch': initializing unpatching transition livepatch: 'test_klp_livepatch': starting unpatching transition livepatch: 'test_klp_livepatch': completing unpatching transition livepatch: 'test_klp_livepatch': unpatching complete % rmmod test_klp_livepatch % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': patching complete % modprobe test_klp_callbacks_mod livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init test_klp_callbacks_mod: test_klp_callbacks_mod_init % rmmod test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_exit test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo livepatch: kernel.ftrace_enabled = 1 % modprobe test_klp_livepatch livepatch: enabling patch 'test_klp_livepatch' livepatch: 'test_klp_livepatch': initializing patching transition livepatch: 'test_klp_livepatch': starting patching transition livepatch: 'test_klp_livepatch': completing patching transition livepatch: 'test_klp_livepatch': patching complete % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled livepatch: 'test_klp_livepatch': initializing unpatching transition livepatch: 'test_klp_livepatch': starting unpatching transition livepatch: 'test_klp_livepatch': completing unpatching transition livepatch: 'test_klp_livepatch': unpatching complete % rmmod test_klp_livepatch % modprobe test_klp_livepatch livepatch: enabling patch 'test_klp_livepatch' livepatch: 'test_klp_livepatch': initializing patching transition livepatch: 'test_klp_livepatch': starting patching transition livepatch: 'test_klp_livepatch': completing patching transition livepatch: 'test_klp_livepatch': patching complete test_klp_livepatch: this has been live patched % modprobe test_klp_atomic_replace replace=0 livepatch: enabling patch 'test_klp_atomic_replace' livepatch: 'test_klp_atomic_replace': initializing patching transition livepatch: 'test_klp_atomic_replace': starting patching transition livepatch: 'test_klp_atomic_replace': completing patching transition livepatch: 'test_klp_atomic_replace': patching complete test_klp_livepatch: this has been live patched test_klp_atomic_replace: this has been live patched % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled livepatch: 'test_klp_atomic_replace': initializing unpatching transition livepatch: 'test_klp_atomic_replace': starting unpatching transition livepatch: 'test_klp_atomic_replace': completing unpatching transition livepatch: 'test_klp_atomic_replace': unpatching complete % rmmod test_klp_atomic_replace test_klp_livepatch: this has been live patched % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled livepatch: 'test_klp_livepatch': initializing unpatching transition livepatch: 'test_klp_livepatch': starting unpatching transition livepatch: 'test_klp_livepatch': completing unpatching transition livepatch: 'test_klp_livepatch': unpatching complete % rmmod test_klp_livepatch % modprobe test_klp_livepatch livepatch: enabling patch 'test_klp_livepatch' livepatch: 'test_klp_livepatch': initializing patching transition livepatch: 'test_klp_livepatch': starting patching transition livepatch: 'test_klp_livepatch': completing patching transition livepatch: 'test_klp_livepatch': patching complete test_klp_livepatch: this has been live patched % modprobe test_klp_atomic_replace replace=1 livepatch: enabling patch 'test_klp_atomic_replace' livepatch: 'test_klp_atomic_replace': initializing patching transition livepatch: 'test_klp_atomic_replace': starting patching transition livepatch: 'test_klp_atomic_replace': completing patching transition livepatch: 'test_klp_atomic_replace': patching complete test_klp_atomic_replace: this has been live patched % rmmod test_klp_livepatch test_klp_atomic_replace: this has been live patched % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled livepatch: 'test_klp_atomic_replace': initializing unpatching transition livepatch: 'test_klp_atomic_replace': starting unpatching transition livepatch: 'test_klp_atomic_replace': completing unpatching transition livepatch: 'test_klp_atomic_replace': unpatching complete % rmmod test_klp_atomic_replace livepatch: kernel.ftrace_enabled = 1 % modprobe test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_init % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': patching complete % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo % rmmod test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_exit % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': patching complete % modprobe test_klp_callbacks_mod livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init test_klp_callbacks_mod: test_klp_callbacks_mod_init % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo % rmmod test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_exit % modprobe test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_init % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': patching complete % rmmod test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_exit test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': patching complete % modprobe test_klp_callbacks_mod livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init test_klp_callbacks_mod: test_klp_callbacks_mod_init % rmmod test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_exit test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': patching complete % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo % modprobe test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_init % modprobe test_klp_callbacks_demo pre_patch_ret=-19 livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux livepatch: pre-patch callback failed for object 'vmlinux' livepatch: failed to enable patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': canceling patching transition, going to unpatch livepatch: 'test_klp_callbacks_demo': completing unpatching transition livepatch: 'test_klp_callbacks_demo': unpatching complete modprobe: ERROR: could not insert 'test_klp_callbacks_demo': No such device % rmmod test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_exit % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': patching complete % echo -19 > /sys/module/test_klp_callbacks_demo/parameters/pre_patch_ret % modprobe test_klp_callbacks_mod livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init livepatch: pre-patch callback failed for object 'test_klp_callbacks_mod' livepatch: patch 'test_klp_callbacks_demo' failed for module 'test_klp_callbacks_mod', refusing to load module 'test_klp_callbacks_mod' modprobe: ERROR: could not insert 'test_klp_callbacks_mod': No such device % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo % modprobe test_klp_callbacks_busy block_transition=N test_klp_callbacks_busy: test_klp_callbacks_busy_init test_klp_callbacks_busy: busymod_work_func enter test_klp_callbacks_busy: busymod_work_func exit % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': patching complete % modprobe test_klp_callbacks_mod livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init test_klp_callbacks_mod: test_klp_callbacks_mod_init % rmmod test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_exit test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo % rmmod test_klp_callbacks_busy test_klp_callbacks_busy: test_klp_callbacks_busy_exit % modprobe test_klp_callbacks_busy block_transition=Y test_klp_callbacks_busy: test_klp_callbacks_busy_init test_klp_callbacks_busy: busymod_work_func enter % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': starting patching transition % modprobe test_klp_callbacks_mod livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init test_klp_callbacks_mod: test_klp_callbacks_mod_init % rmmod test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_exit livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': reversing transition from patching to unpatching livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo % rmmod test_klp_callbacks_busy test_klp_callbacks_busy: busymod_work_func exit test_klp_callbacks_busy: test_klp_callbacks_busy_exit % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': patching complete % modprobe test_klp_callbacks_demo2 livepatch: enabling patch 'test_klp_callbacks_demo2' livepatch: 'test_klp_callbacks_demo2': initializing patching transition test_klp_callbacks_demo2: pre_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo2': starting patching transition livepatch: 'test_klp_callbacks_demo2': completing patching transition test_klp_callbacks_demo2: post_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo2': patching complete % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo2': starting unpatching transition livepatch: 'test_klp_callbacks_demo2': completing unpatching transition test_klp_callbacks_demo2: post_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo2': unpatching complete % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo2 % rmmod test_klp_callbacks_demo % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': patching complete % modprobe test_klp_callbacks_demo2 replace=1 livepatch: enabling patch 'test_klp_callbacks_demo2' livepatch: 'test_klp_callbacks_demo2': initializing patching transition test_klp_callbacks_demo2: pre_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo2': starting patching transition livepatch: 'test_klp_callbacks_demo2': completing patching transition test_klp_callbacks_demo2: post_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo2': patching complete % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo2': starting unpatching transition livepatch: 'test_klp_callbacks_demo2': completing unpatching transition test_klp_callbacks_demo2: post_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo2': unpatching complete % rmmod test_klp_callbacks_demo2 % rmmod test_klp_callbacks_demo livepatch: kernel.ftrace_enabled = 1 % modprobe test_klp_shadow_vars test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 test_klp_shadow_vars: got expected NULL result test_klp_shadow_vars: shadow_ctor: PTR3 -> PTR2 test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 test_klp_shadow_vars: shadow_ctor: PTR6 -> PTR5 test_klp_shadow_vars: klp_shadow_alloc(obj=PTR1, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR5 = PTR6 test_klp_shadow_vars: shadow_ctor: PTR8 -> PTR7 test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 test_klp_shadow_vars: shadow_ctor: PTR11 -> PTR10 test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR10 = PTR11 test_klp_shadow_vars: shadow_ctor: PTR13 -> PTR12 test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 test_klp_shadow_vars: shadow_ctor: PTR16 -> PTR15 test_klp_shadow_vars: klp_shadow_alloc(obj=PTR14, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR15 = PTR16 test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR3 test_klp_shadow_vars: got expected PTR3 -> PTR2 result test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 test_klp_shadow_vars: got expected PTR6 -> PTR5 result test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR8 test_klp_shadow_vars: got expected PTR8 -> PTR7 result test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 test_klp_shadow_vars: got expected PTR11 -> PTR10 result test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR13 test_klp_shadow_vars: got expected PTR13 -> PTR12 result test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 test_klp_shadow_vars: got expected PTR16 -> PTR15 result test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 test_klp_shadow_vars: got expected PTR3 -> PTR2 result test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 test_klp_shadow_vars: got expected PTR8 -> PTR7 result test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 test_klp_shadow_vars: got expected PTR13 -> PTR12 result test_klp_shadow_vars: shadow_dtor(obj=PTR1, shadow_data=PTR3) test_klp_shadow_vars: klp_shadow_free(obj=PTR1, id=0x1234, dtor=PTR17) test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 test_klp_shadow_vars: got expected NULL result test_klp_shadow_vars: shadow_dtor(obj=PTR9, shadow_data=PTR8) test_klp_shadow_vars: klp_shadow_free(obj=PTR9, id=0x1234, dtor=PTR17) test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR0 test_klp_shadow_vars: got expected NULL result test_klp_shadow_vars: shadow_dtor(obj=PTR14, shadow_data=PTR13) test_klp_shadow_vars: klp_shadow_free(obj=PTR14, id=0x1234, dtor=PTR17) test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR0 test_klp_shadow_vars: got expected NULL result test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 test_klp_shadow_vars: got expected PTR6 -> PTR5 result test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 test_klp_shadow_vars: got expected PTR11 -> PTR10 result test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 test_klp_shadow_vars: got expected PTR16 -> PTR15 result test_klp_shadow_vars: klp_shadow_free_all(id=0x1235, dtor=PTR0) test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR0 test_klp_shadow_vars: got expected NULL result test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR0 test_klp_shadow_vars: got expected NULL result test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR0 test_klp_shadow_vars: got expected NULL result % rmmod test_klp_shadow_vars livepatch: kernel.ftrace_enabled = 1 % modprobe test_klp_state livepatch: enabling patch 'test_klp_state' livepatch: 'test_klp_state': initializing patching transition test_klp_state: pre_patch_callback: vmlinux test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel livepatch: 'test_klp_state': starting patching transition livepatch: 'test_klp_state': completing patching transition test_klp_state: post_patch_callback: vmlinux test_klp_state: fix_console_loglevel: fixing console_loglevel livepatch: 'test_klp_state': patching complete % echo 0 > /sys/kernel/livepatch/test_klp_state/enabled livepatch: 'test_klp_state': initializing unpatching transition test_klp_state: pre_unpatch_callback: vmlinux test_klp_state: restore_console_loglevel: restoring console_loglevel livepatch: 'test_klp_state': starting unpatching transition livepatch: 'test_klp_state': completing unpatching transition test_klp_state: post_unpatch_callback: vmlinux test_klp_state: free_loglevel_state: freeing space for the stored console_loglevel livepatch: 'test_klp_state': unpatching complete % rmmod test_klp_state % modprobe test_klp_state livepatch: enabling patch 'test_klp_state' livepatch: 'test_klp_state': initializing patching transition test_klp_state: pre_patch_callback: vmlinux test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel livepatch: 'test_klp_state': starting patching transition livepatch: 'test_klp_state': completing patching transition test_klp_state: post_patch_callback: vmlinux test_klp_state: fix_console_loglevel: fixing console_loglevel livepatch: 'test_klp_state': patching complete % modprobe test_klp_state2 livepatch: enabling patch 'test_klp_state2' livepatch: 'test_klp_state2': initializing patching transition test_klp_state2: pre_patch_callback: vmlinux test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated livepatch: 'test_klp_state2': starting patching transition livepatch: 'test_klp_state2': completing patching transition test_klp_state2: post_patch_callback: vmlinux test_klp_state2: fix_console_loglevel: taking over the console_loglevel change livepatch: 'test_klp_state2': patching complete % rmmod test_klp_state % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled livepatch: 'test_klp_state2': initializing unpatching transition test_klp_state2: pre_unpatch_callback: vmlinux test_klp_state2: restore_console_loglevel: restoring console_loglevel livepatch: 'test_klp_state2': starting unpatching transition livepatch: 'test_klp_state2': completing unpatching transition test_klp_state2: post_unpatch_callback: vmlinux test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel livepatch: 'test_klp_state2': unpatching complete % rmmod test_klp_state2 % modprobe test_klp_state2 livepatch: enabling patch 'test_klp_state2' livepatch: 'test_klp_state2': initializing patching transition test_klp_state2: pre_patch_callback: vmlinux test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel livepatch: 'test_klp_state2': starting patching transition livepatch: 'test_klp_state2': completing patching transition test_klp_state2: post_patch_callback: vmlinux test_klp_state2: fix_console_loglevel: fixing console_loglevel livepatch: 'test_klp_state2': patching complete % modprobe test_klp_state3 livepatch: enabling patch 'test_klp_state3' livepatch: 'test_klp_state3': initializing patching transition test_klp_state3: pre_patch_callback: vmlinux test_klp_state3: allocate_loglevel_state: space to store console_loglevel already allocated livepatch: 'test_klp_state3': starting patching transition livepatch: 'test_klp_state3': completing patching transition test_klp_state3: post_patch_callback: vmlinux test_klp_state3: fix_console_loglevel: taking over the console_loglevel change livepatch: 'test_klp_state3': patching complete % rmmod test_klp_state2 % modprobe test_klp_state2 livepatch: enabling patch 'test_klp_state2' livepatch: 'test_klp_state2': initializing patching transition test_klp_state2: pre_patch_callback: vmlinux test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated livepatch: 'test_klp_state2': starting patching transition livepatch: 'test_klp_state2': completing patching transition test_klp_state2: post_patch_callback: vmlinux test_klp_state2: fix_console_loglevel: taking over the console_loglevel change livepatch: 'test_klp_state2': patching complete % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled livepatch: 'test_klp_state2': initializing unpatching transition test_klp_state2: pre_unpatch_callback: vmlinux test_klp_state2: restore_console_loglevel: restoring console_loglevel livepatch: 'test_klp_state2': starting unpatching transition livepatch: 'test_klp_state2': completing unpatching transition test_klp_state2: post_unpatch_callback: vmlinux test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel livepatch: 'test_klp_state2': unpatching complete % rmmod test_klp_state2 % rmmod test_klp_state3 % modprobe test_klp_state2 livepatch: enabling patch 'test_klp_state2' livepatch: 'test_klp_state2': initializing patching transition test_klp_state2: pre_patch_callback: vmlinux test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel livepatch: 'test_klp_state2': starting patching transition livepatch: 'test_klp_state2': completing patching transition test_klp_state2: post_patch_callback: vmlinux test_klp_state2: fix_console_loglevel: fixing console_loglevel livepatch: 'test_klp_state2': patching complete % modprobe test_klp_state livepatch: Livepatch patch (test_klp_state) is not compatible with the already installed livepatches. modprobe: ERROR: could not insert 'test_klp_state': Invalid argument % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled livepatch: 'test_klp_state2': initializing unpatching transition test_klp_state2: pre_unpatch_callback: vmlinux test_klp_state2: restore_console_loglevel: restoring console_loglevel livepatch: 'test_klp_state2': starting unpatching transition livepatch: 'test_klp_state2': completing unpatching transition test_klp_state2: post_unpatch_callback: vmlinux test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel livepatch: 'test_klp_state2': unpatching complete % rmmod test_klp_state2 livepatch: kernel.ftrace_enabled = 1 livepatch: kernel.ftrace_enabled = 0 % modprobe test_klp_livepatch livepatch: enabling patch 'test_klp_livepatch' livepatch: 'test_klp_livepatch': initializing patching transition livepatch: failed to register ftrace handler for function 'cmdline_proc_show' (-16) livepatch: failed to patch object 'vmlinux' livepatch: failed to enable patch 'test_klp_livepatch' livepatch: 'test_klp_livepatch': canceling patching transition, going to unpatch livepatch: 'test_klp_livepatch': completing unpatching transition livepatch: 'test_klp_livepatch': unpatching complete modprobe: ERROR: could not insert 'test_klp_livepatch': Device or resource busy livepatch: kernel.ftrace_enabled = 1 % modprobe test_klp_livepatch livepatch: enabling patch 'test_klp_livepatch' livepatch: 'test_klp_livepatch': initializing patching transition livepatch: 'test_klp_livepatch': starting patching transition livepatch: 'test_klp_livepatch': completing patching transition livepatch: 'test_klp_livepatch': patching complete livepatch: sysctl: setting key "kernel.ftrace_enabled": Device or resource busy % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled livepatch: 'test_klp_livepatch': initializing unpatching transition livepatch: 'test_klp_livepatch': starting unpatching transition livepatch: 'test_klp_livepatch': completing unpatching transition livepatch: 'test_klp_livepatch': unpatching complete % rmmod test_klp_livepatch livepatch: kernel.ftrace_enabled = 1 % modprobe test_klp_livepatch livepatch: enabling patch 'test_klp_livepatch' livepatch: 'test_klp_livepatch': initializing patching transition livepatch: 'test_klp_livepatch': starting patching transition livepatch: 'test_klp_livepatch': completing patching transition livepatch: 'test_klp_livepatch': patching complete % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled livepatch: 'test_klp_livepatch': initializing unpatching transition livepatch: 'test_klp_livepatch': starting unpatching transition livepatch: 'test_klp_livepatch': completing unpatching transition livepatch: 'test_klp_livepatch': unpatching complete % rmmod test_klp_livepatch % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': patching complete % modprobe test_klp_callbacks_mod livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init test_klp_callbacks_mod: test_klp_callbacks_mod_init % rmmod test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_exit test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo livepatch: kernel.ftrace_enabled = 1 % modprobe test_klp_livepatch livepatch: enabling patch 'test_klp_livepatch' livepatch: 'test_klp_livepatch': initializing patching transition livepatch: 'test_klp_livepatch': starting patching transition livepatch: 'test_klp_livepatch': completing patching transition livepatch: 'test_klp_livepatch': patching complete % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled livepatch: 'test_klp_livepatch': initializing unpatching transition livepatch: 'test_klp_livepatch': starting unpatching transition livepatch: 'test_klp_livepatch': completing unpatching transition livepatch: 'test_klp_livepatch': unpatching complete % rmmod test_klp_livepatch % modprobe test_klp_livepatch livepatch: enabling patch 'test_klp_livepatch' livepatch: 'test_klp_livepatch': initializing patching transition livepatch: 'test_klp_livepatch': starting patching transition livepatch: 'test_klp_livepatch': completing patching transition livepatch: 'test_klp_livepatch': patching complete test_klp_livepatch: this has been live patched % modprobe test_klp_atomic_replace replace=0 livepatch: enabling patch 'test_klp_atomic_replace' livepatch: 'test_klp_atomic_replace': initializing patching transition livepatch: 'test_klp_atomic_replace': starting patching transition livepatch: 'test_klp_atomic_replace': completing patching transition livepatch: 'test_klp_atomic_replace': patching complete test_klp_livepatch: this has been live patched test_klp_atomic_replace: this has been live patched % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled livepatch: 'test_klp_atomic_replace': initializing unpatching transition livepatch: 'test_klp_atomic_replace': starting unpatching transition livepatch: 'test_klp_atomic_replace': completing unpatching transition livepatch: 'test_klp_atomic_replace': unpatching complete % rmmod test_klp_atomic_replace test_klp_livepatch: this has been live patched % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled livepatch: 'test_klp_livepatch': initializing unpatching transition livepatch: 'test_klp_livepatch': starting unpatching transition livepatch: 'test_klp_livepatch': completing unpatching transition livepatch: 'test_klp_livepatch': unpatching complete % rmmod test_klp_livepatch % modprobe test_klp_livepatch livepatch: enabling patch 'test_klp_livepatch' livepatch: 'test_klp_livepatch': initializing patching transition livepatch: 'test_klp_livepatch': starting patching transition livepatch: 'test_klp_livepatch': completing patching transition livepatch: 'test_klp_livepatch': patching complete test_klp_livepatch: this has been live patched % modprobe test_klp_atomic_replace replace=1 livepatch: enabling patch 'test_klp_atomic_replace' livepatch: 'test_klp_atomic_replace': initializing patching transition livepatch: 'test_klp_atomic_replace': starting patching transition livepatch: 'test_klp_atomic_replace': completing patching transition livepatch: 'test_klp_atomic_replace': patching complete test_klp_atomic_replace: this has been live patched % rmmod test_klp_livepatch test_klp_atomic_replace: this has been live patched % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled livepatch: 'test_klp_atomic_replace': initializing unpatching transition livepatch: 'test_klp_atomic_replace': starting unpatching transition livepatch: 'test_klp_atomic_replace': completing unpatching transition livepatch: 'test_klp_atomic_replace': unpatching complete % rmmod test_klp_atomic_replace livepatch: kernel.ftrace_enabled = 1 % modprobe test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_init % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': patching complete % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo % rmmod test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_exit % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': patching complete % modprobe test_klp_callbacks_mod livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init test_klp_callbacks_mod: test_klp_callbacks_mod_init % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo % rmmod test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_exit % modprobe test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_init % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state livepatch: 'test_klp_callbacks_demo': patching complete % rmmod test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_exit test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': patching complete % modprobe test_klp_callbacks_mod livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init test_klp_callbacks_mod: test_klp_callbacks_mod_init % rmmod test_klp_callbacks_mod test_klp_callbacks_mod: test_klp_callbacks_mod_exit test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo % modprobe test_klp_callbacks_demo livepatch: enabling patch 'test_klp_callbacks_demo' livepatch: 'test_klp_callbacks_demo': initializing patching transition test_klp_callbacks_demo: pre_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting patching transition livepatch: 'test_klp_callbacks_demo': completing patching transition test_klp_callbacks_demo: post_patch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': patching complete % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled livepatch: 'test_klp_callbacks_demo': initializing unpatching transition test_klp_callbacks_demo: pre_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': starting unpatching transition livepatch: 'test_klp_callbacks_demo': completing unpatching transition test_klp_callbacks_demo: post_unpatch_callback: vmlinux livepatch: 'test_klp_callbacks_demo': unpatching complete % rmmod test_klp_callbacks_demo
[ 91.923385] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 [ 91.923387] test_klp_shadow_vars: got expected PTR11 -> PTR10 result [ 91.923388] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 [ 91.923389] test_klp_shadow_vars: got expected PTR16 -> PTR15 result [ 91.923403] test_klp_shadow_vars: klp_shadow_free_all(id=0x1235, dtor=PTR0) [ 91.923404] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR0 [ 91.923405] test_klp_shadow_vars: got expected NULL result [ 91.923406] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR0 [ 91.923408] test_klp_shadow_vars: got expected NULL result [ 91.923408] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR0 [ 91.923410] test_klp_shadow_vars: got expected NULL result [ 91.924707] % rmmod test_klp_shadow_vars [ 92.043422] livepatch: kernel.ftrace_enabled = 1 [ 92.049886] ===== TEST: system state modification ===== [ 92.053102] % modprobe test_klp_state [ 92.054575] livepatch: enabling patch 'test_klp_state' [ 92.054577] livepatch: 'test_klp_state': initializing patching transition [ 92.054599] test_klp_state: pre_patch_callback: vmlinux [ 92.054600] test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel [ 92.054601] livepatch: 'test_klp_state': starting patching transition [ 92.911051] livepatch: 'test_klp_state': completing patching transition [ 92.911154] test_klp_state: post_patch_callback: vmlinux [ 92.911156] test_klp_state: fix_console_loglevel: fixing console_loglevel [ 92.911157] livepatch: 'test_klp_state': patching complete [ 92.971706] % echo 0 > /sys/kernel/livepatch/test_klp_state/enabled [ 92.971726] livepatch: 'test_klp_state': initializing unpatching transition [ 92.971748] test_klp_state: pre_unpatch_callback: vmlinux [ 92.971749] test_klp_state: restore_console_loglevel: restoring console_loglevel [ 92.971750] livepatch: 'test_klp_state': starting unpatching transition [ 94.751032] livepatch: 'test_klp_state': completing unpatching transition [ 94.751134] test_klp_state: post_unpatch_callback: vmlinux [ 94.751136] test_klp_state: free_loglevel_state: freeing space for the stored console_loglevel [ 94.751137] livepatch: 'test_klp_state': unpatching complete [ 94.788056] % rmmod test_klp_state [ 94.845476] ===== TEST: taking over system state modification ===== [ 94.848473] % modprobe test_klp_state [ 94.849942] livepatch: enabling patch 'test_klp_state' [ 94.849944] livepatch: 'test_klp_state': initializing patching transition [ 94.849964] test_klp_state: pre_patch_callback: vmlinux [ 94.849965] test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel [ 94.849966] livepatch: 'test_klp_state': starting patching transition [ 95.711025] livepatch: 'test_klp_state': completing patching transition [ 95.711177] test_klp_state: post_patch_callback: vmlinux [ 95.711179] test_klp_state: fix_console_loglevel: fixing console_loglevel [ 95.711180] livepatch: 'test_klp_state': patching complete [ 95.770236] % modprobe test_klp_state2 [ 95.771616] livepatch: enabling patch 'test_klp_state2' [ 95.771618] livepatch: 'test_klp_state2': initializing patching transition [ 95.771638] test_klp_state2: pre_patch_callback: vmlinux [ 95.771639] test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated [ 95.771641] livepatch: 'test_klp_state2': starting patching transition [ 97.081037] livepatch: 'test_klp_state2': completing patching transition [ 97.081197] test_klp_state2: post_patch_callback: vmlinux [ 97.081198] test_klp_state2: fix_console_loglevel: taking over the console_loglevel change [ 97.081199] livepatch: 'test_klp_state2': patching complete [ 97.096083] % rmmod test_klp_state [ 97.140728] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 97.140747] livepatch: 'test_klp_state2': initializing unpatching transition [ 97.140768] test_klp_state2: pre_unpatch_callback: vmlinux [ 97.140769] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 97.140770] livepatch: 'test_klp_state2': starting unpatching transition [ 98.671037] livepatch: 'test_klp_state2': completing unpatching transition [ 98.671175] test_klp_state2: post_unpatch_callback: vmlinux [ 98.671177] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 98.671179] livepatch: 'test_klp_state2': unpatching complete [ 98.755809] % rmmod test_klp_state2 [ 98.815472] ===== TEST: compatible cumulative livepatches ===== [ 98.818642] % modprobe test_klp_state2 [ 98.820299] livepatch: enabling patch 'test_klp_state2' [ 98.820301] livepatch: 'test_klp_state2': initializing patching transition [ 98.820328] test_klp_state2: pre_patch_callback: vmlinux [ 98.820330] test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel [ 98.820331] livepatch: 'test_klp_state2': starting patching transition [ 100.031067] livepatch: 'test_klp_state2': completing patching transition [ 100.031184] test_klp_state2: post_patch_callback: vmlinux [ 100.031185] test_klp_state2: fix_console_loglevel: fixing console_loglevel [ 100.031187] livepatch: 'test_klp_state2': patching complete [ 100.045573] % modprobe test_klp_state3 [ 100.047069] livepatch: enabling patch 'test_klp_state3' [ 100.047072] livepatch: 'test_klp_state3': initializing patching transition [ 100.047093] test_klp_state3: pre_patch_callback: vmlinux [ 100.047094] test_klp_state3: allocate_loglevel_state: space to store console_loglevel already allocated [ 100.047095] livepatch: 'test_klp_state3': starting patching transition [ 101.711037] livepatch: 'test_klp_state3': completing patching transition [ 101.711204] test_klp_state3: post_patch_callback: vmlinux [ 101.711206] test_klp_state3: fix_console_loglevel: taking over the console_loglevel change [ 101.711207] livepatch: 'test_klp_state3': patching complete [ 101.778205] % rmmod test_klp_state2 [ 101.853923] % modprobe test_klp_state2 [ 101.855447] livepatch: enabling patch 'test_klp_state2' [ 101.855449] livepatch: 'test_klp_state2': initializing patching transition [ 101.855470] test_klp_state2: pre_patch_callback: vmlinux [ 101.855472] test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated [ 101.855473] livepatch: 'test_klp_state2': starting patching transition [ 103.630965] livepatch: 'test_klp_state2': completing patching transition [ 103.631070] test_klp_state2: post_patch_callback: vmlinux [ 103.631071] test_klp_state2: fix_console_loglevel: taking over the console_loglevel change [ 103.631073] livepatch: 'test_klp_state2': patching complete [ 103.686892] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 103.686911] livepatch: 'test_klp_state2': initializing unpatching transition [ 103.686932] test_klp_state2: pre_unpatch_callback: vmlinux [ 103.686933] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 103.686935] livepatch: 'test_klp_state2': starting unpatching transition [ 105.150996] livepatch: 'test_klp_state2': completing unpatching transition [ 105.151097] test_klp_state2: post_unpatch_callback: vmlinux [ 105.151099] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 105.151100] livepatch: 'test_klp_state2': unpatching complete [ 105.199966] % rmmod test_klp_state2 [ 105.281410] % rmmod test_klp_state3 [ 105.355459] ===== TEST: incompatible cumulative livepatches ===== [ 105.358650] % modprobe test_klp_state2 [ 105.360034] livepatch: enabling patch 'test_klp_state2' [ 105.360035] livepatch: 'test_klp_state2': initializing patching transition [ 105.360056] test_klp_state2: pre_patch_callback: vmlinux [ 105.360057] test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel [ 105.360058] livepatch: 'test_klp_state2': starting patching transition [ 107.071045] livepatch: 'test_klp_state2': completing patching transition [ 107.071145] test_klp_state2: post_patch_callback: vmlinux [ 107.071147] test_klp_state2: fix_console_loglevel: fixing console_loglevel [ 107.071148] livepatch: 'test_klp_state2': patching complete [ 107.087110] % modprobe test_klp_state [ 107.088695] livepatch: Livepatch patch (test_klp_state) is not compatible with the already installed livepatches. [ 107.190677] modprobe: ERROR: could not insert 'test_klp_state': Invalid argument [ 107.190716] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 107.190734] livepatch: 'test_klp_state2': initializing unpatching transition [ 107.190753] test_klp_state2: pre_unpatch_callback: vmlinux [ 107.190754] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 107.190755] livepatch: 'test_klp_state2': starting unpatching transition [ 108.111015] livepatch: 'test_klp_state2': completing unpatching transition [ 108.111118] test_klp_state2: post_unpatch_callback: vmlinux [ 108.111120] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 108.111121] livepatch: 'test_klp_state2': unpatching complete [ 108.200035] % rmmod test_klp_state2 [ 108.301787] livepatch: kernel.ftrace_enabled = 1 [ 108.308056] ===== TEST: livepatch interaction with ftrace_enabled sysctl ===== [ 108.309828] livepatch: kernel.ftrace_enabled = 0 [ 108.309890] % modprobe test_klp_livepatch [ 108.311242] livepatch: enabling patch 'test_klp_livepatch' [ 108.311244] livepatch: 'test_klp_livepatch': initializing patching transition [ 108.311267] livepatch: failed to register ftrace handler for function 'cmdline_proc_show' (-16) [ 108.311270] livepatch: failed to patch object 'vmlinux' [ 108.311271] livepatch: failed to enable patch 'test_klp_livepatch' [ 108.311272] livepatch: 'test_klp_livepatch': canceling patching transition, going to unpatch [ 108.311273] livepatch: 'test_klp_livepatch': completing unpatching transition [ 108.311382] livepatch: 'test_klp_livepatch': unpatching complete [ 108.500681] modprobe: ERROR: could not insert 'test_klp_livepatch': Device or resource busy [ 108.502529] livepatch: kernel.ftrace_enabled = 1 [ 108.505528] % modprobe test_klp_livepatch [ 108.506881] livepatch: enabling patch 'test_klp_livepatch' [ 108.506882] livepatch: 'test_klp_livepatch': initializing patching transition [ 108.508030] livepatch: 'test_klp_livepatch': starting patching transition [ 109.790992] livepatch: 'test_klp_livepatch': completing patching transition [ 109.791146] livepatch: 'test_klp_livepatch': patching complete [ 109.834645] livepatch: sysctl: setting key "kernel.ftrace_enabled": Device or resource busy [ 109.835658] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 109.835676] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 109.835692] livepatch: 'test_klp_livepatch': starting unpatching transition [ 110.831016] livepatch: 'test_klp_livepatch': completing unpatching transition [ 110.832521] livepatch: 'test_klp_livepatch': unpatching complete [ 110.845082] % rmmod test_klp_livepatch [ 110.962324] livepatch: kernel.ftrace_enabled = 1 [ 110.969070] ===== TEST: sysfs test ===== [ 110.972147] % modprobe test_klp_livepatch [ 110.973575] livepatch: enabling patch 'test_klp_livepatch' [ 110.973578] livepatch: 'test_klp_livepatch': initializing patching transition [ 110.974676] livepatch: 'test_klp_livepatch': starting patching transition [ 112.671034] livepatch: 'test_klp_livepatch': completing patching transition [ 112.671137] livepatch: 'test_klp_livepatch': patching complete [ 112.711815] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 112.711832] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 112.711853] livepatch: 'test_klp_livepatch': starting unpatching transition [ 113.711046] livepatch: 'test_klp_livepatch': completing unpatching transition [ 113.712556] livepatch: 'test_klp_livepatch': unpatching complete [ 113.721666] % rmmod test_klp_livepatch [ 113.786348] ===== TEST: sysfs test object/patched ===== [ 113.789508] % modprobe test_klp_callbacks_demo [ 113.791059] livepatch: enabling patch 'test_klp_callbacks_demo' [ 113.791061] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 113.791082] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 113.791083] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 114.831046] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 114.831155] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 114.831157] livepatch: 'test_klp_callbacks_demo': patching complete [ 114.915700] % modprobe test_klp_callbacks_mod [ 114.917199] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 114.917201] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 114.917203] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 114.917220] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 114.919407] % rmmod test_klp_callbacks_mod [ 114.920563] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 114.920578] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 114.920580] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 114.920582] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 114.991648] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 114.991667] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 114.991690] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 114.991692] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 116.671055] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 116.671159] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 116.671177] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 116.706610] % rmmod test_klp_callbacks_demo [ 116.853345] livepatch: kernel.ftrace_enabled = 1 [ 116.860222] ===== TEST: basic function patching ===== [ 116.863329] % modprobe test_klp_livepatch [ 116.864936] livepatch: enabling patch 'test_klp_livepatch' [ 116.864938] livepatch: 'test_klp_livepatch': initializing patching transition [ 116.866224] livepatch: 'test_klp_livepatch': starting patching transition [ 117.791071] livepatch: 'test_klp_livepatch': completing patching transition [ 117.791193] livepatch: 'test_klp_livepatch': patching complete [ 117.885360] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 117.885397] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 117.885424] livepatch: 'test_klp_livepatch': starting unpatching transition [ 118.750980] livepatch: 'test_klp_livepatch': completing unpatching transition [ 118.752543] livepatch: 'test_klp_livepatch': unpatching complete [ 118.794530] % rmmod test_klp_livepatch [ 118.897157] ===== TEST: multiple livepatches ===== [ 118.900009] % modprobe test_klp_livepatch [ 118.901338] livepatch: enabling patch 'test_klp_livepatch' [ 118.901341] livepatch: 'test_klp_livepatch': initializing patching transition [ 118.902413] livepatch: 'test_klp_livepatch': starting patching transition [ 119.711012] livepatch: 'test_klp_livepatch': completing patching transition [ 119.711114] livepatch: 'test_klp_livepatch': patching complete [ 119.718796] test_klp_livepatch: this has been live patched [ 119.723001] % modprobe test_klp_atomic_replace replace=0 [ 119.724612] livepatch: enabling patch 'test_klp_atomic_replace' [ 119.724614] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 119.725833] livepatch: 'test_klp_atomic_replace': starting patching transition [ 120.751022] livepatch: 'test_klp_atomic_replace': completing patching transition [ 120.751130] livepatch: 'test_klp_atomic_replace': patching complete [ 120.847005] test_klp_livepatch: this has been live patched [ 120.847986] test_klp_atomic_replace: this has been live patched [ 120.848118] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 120.848138] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 120.848158] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 121.710988] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 121.712378] livepatch: 'test_klp_atomic_replace': unpatching complete [ 121.757104] % rmmod test_klp_atomic_replace [ 121.801514] test_klp_livepatch: this has been live patched [ 121.802520] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 121.802538] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 121.802554] livepatch: 'test_klp_livepatch': starting unpatching transition [ 122.761006] livepatch: 'test_klp_livepatch': completing unpatching transition [ 122.762405] livepatch: 'test_klp_livepatch': unpatching complete [ 122.812386] % rmmod test_klp_livepatch [ 122.888229] ===== TEST: atomic replace livepatch ===== [ 122.891365] % modprobe test_klp_livepatch [ 122.892757] livepatch: enabling patch 'test_klp_livepatch' [ 122.892759] livepatch: 'test_klp_livepatch': initializing patching transition [ 122.893900] livepatch: 'test_klp_livepatch': starting patching transition [ 123.871073] livepatch: 'test_klp_livepatch': completing patching transition [ 123.871179] livepatch: 'test_klp_livepatch': patching complete [ 123.913201] test_klp_livepatch: this has been live patched [ 123.917508] % modprobe test_klp_atomic_replace replace=1 [ 123.918994] livepatch: enabling patch 'test_klp_atomic_replace' [ 123.918996] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 123.920106] livepatch: 'test_klp_atomic_replace': starting patching transition [ 124.751016] livepatch: 'test_klp_atomic_replace': completing patching transition [ 124.752390] livepatch: 'test_klp_atomic_replace': patching complete [ 124.838483] test_klp_atomic_replace: this has been live patched [ 124.839576] % rmmod test_klp_livepatch [ 124.892319] test_klp_atomic_replace: this has been live patched [ 124.892494] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 124.892513] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 124.892529] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 125.711010] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 125.712510] livepatch: 'test_klp_atomic_replace': unpatching complete [ 125.801651] % rmmod test_klp_atomic_replace [ 125.905407] livepatch: kernel.ftrace_enabled = 1 [ 125.912644] ===== TEST: target module before livepatch ===== [ 125.915835] % modprobe test_klp_callbacks_mod [ 125.917236] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 125.920790] % modprobe test_klp_callbacks_demo [ 125.922345] livepatch: enabling patch 'test_klp_callbacks_demo' [ 125.922347] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 125.922366] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 125.922367] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 125.922369] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 127.711053] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 127.711189] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 127.711191] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 127.711193] livepatch: 'test_klp_callbacks_demo': patching complete [ 127.755072] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 127.755091] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 127.755106] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 127.755107] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 127.755109] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 128.671068] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 128.671171] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 128.671172] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 128.671174] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 128.765224] % rmmod test_klp_callbacks_demo [ 128.811614] % rmmod test_klp_callbacks_mod [ 128.812787] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 128.887174] ===== TEST: module_coming notifier ===== [ 128.890422] % modprobe test_klp_callbacks_demo [ 128.892042] livepatch: enabling patch 'test_klp_callbacks_demo' [ 128.892045] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 128.892067] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 128.892068] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 129.791064] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 129.791173] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 129.791175] livepatch: 'test_klp_callbacks_demo': patching complete [ 129.812482] % modprobe test_klp_callbacks_mod [ 129.813968] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 129.813971] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 129.813973] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 129.813990] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 129.814364] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 129.814383] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 129.814404] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 129.814405] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 129.814407] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 130.671041] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 130.671174] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 130.671176] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 130.671178] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 130.723905] % rmmod test_klp_callbacks_demo [ 130.771625] % rmmod test_klp_callbacks_mod [ 130.772641] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 130.826909] ===== TEST: module_going notifier ===== [ 130.830202] % modprobe test_klp_callbacks_mod [ 130.831538] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 130.834984] % modprobe test_klp_callbacks_demo [ 130.836549] livepatch: enabling patch 'test_klp_callbacks_demo' [ 130.836552] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 130.836573] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 130.836574] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 130.836576] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 131.710974] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 131.711075] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 131.711077] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 131.711079] livepatch: 'test_klp_callbacks_demo': patching complete [ 131.754244] % rmmod test_klp_callbacks_mod [ 131.755454] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 131.755471] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 131.755473] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 131.755475] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 131.800736] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 131.800754] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 131.800775] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 131.800776] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 133.071027] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 133.071132] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 133.071134] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 133.113297] % rmmod test_klp_callbacks_demo [ 133.177434] ===== TEST: module_coming and module_going notifiers ===== [ 133.180622] % modprobe test_klp_callbacks_demo [ 133.182228] livepatch: enabling patch 'test_klp_callbacks_demo' [ 133.182231] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 133.182251] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 133.182252] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 134.751073] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 134.751184] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 134.751187] livepatch: 'test_klp_callbacks_demo': patching complete [ 134.813811] % modprobe test_klp_callbacks_mod [ 134.815280] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 134.815282] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 134.815284] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 134.815302] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 134.816526] % rmmod test_klp_callbacks_mod [ 134.817758] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 134.817773] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 134.817775] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 134.817776] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 134.940787] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 134.940806] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 134.940828] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 134.940829] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 135.950967] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 135.951069] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 135.951071] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 136.051536] % rmmod test_klp_callbacks_demo [ 136.117597] ===== TEST: target module not present ===== [ 136.120836] % modprobe test_klp_callbacks_demo [ 136.122441] livepatch: enabling patch 'test_klp_callbacks_demo' [ 136.122444] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 136.122476] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 136.122477] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 137.871054] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 137.871179] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 137.871181] livepatch: 'test_klp_callbacks_demo': patching complete [ 137.952610] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 137.952631] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 137.952666] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 137.952668] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 139.071051] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 139.071152] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 139.071154] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 139.164250] % rmmod test_klp_callbacks_demo [ 139.257782] ===== TEST: pre-patch callback -ENODEV ===== [ 139.260610] % modprobe test_klp_callbacks_mod [ 139.261932] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 139.262266] % modprobe test_klp_callbacks_demo pre_patch_ret=-19 [ 139.263690] livepatch: enabling patch 'test_klp_callbacks_demo' [ 139.263692] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 139.263711] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 139.263712] livepatch: pre-patch callback failed for object 'vmlinux' [ 139.263713] livepatch: failed to enable patch 'test_klp_callbacks_demo' [ 139.263714] livepatch: 'test_klp_callbacks_demo': canceling patching transition, going to unpatch [ 139.263715] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 139.263820] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 139.410666] modprobe: ERROR: could not insert 'test_klp_callbacks_demo': No such device [ 139.411683] % rmmod test_klp_callbacks_mod [ 139.412838] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 139.477858] ===== TEST: module_coming + pre-patch callback -ENODEV ===== [ 139.480794] % modprobe test_klp_callbacks_demo [ 139.482279] livepatch: enabling patch 'test_klp_callbacks_demo' [ 139.482282] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 139.482303] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 139.482304] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 140.831122] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 140.831279] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 140.831281] livepatch: 'test_klp_callbacks_demo': patching complete [ 140.908032] % echo -19 > /sys/module/test_klp_callbacks_demo/parameters/pre_patch_ret [ 140.908963] % modprobe test_klp_callbacks_mod [ 140.910243] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 140.910246] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 140.910248] livepatch: pre-patch callback failed for object 'test_klp_callbacks_mod' [ 140.910249] livepatch: patch 'test_klp_callbacks_demo' failed for module 'test_klp_callbacks_mod', refusing to load module 'test_klp_callbacks_mod' [ 141.030671] modprobe: ERROR: could not insert 'test_klp_callbacks_mod': No such device [ 141.030722] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 141.030738] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 141.030776] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 141.030777] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 141.789613] crw_info : CRW reports slct=0, oflw=0, chn=0, rsc=B, anc=0, erc=0, rsid=0 [ 142.031077] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 142.031196] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 142.031198] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 142.041387] % rmmod test_klp_callbacks_demo [ 142.108391] ===== TEST: multiple target modules ===== [ 142.111495] % modprobe test_klp_callbacks_busy block_transition=N [ 142.112950] test_klp_callbacks_busy: test_klp_callbacks_busy_init [ 142.112954] test_klp_callbacks_busy: busymod_work_func enter [ 142.112956] test_klp_callbacks_busy: busymod_work_func exit [ 142.116379] % modprobe test_klp_callbacks_demo [ 142.117801] livepatch: enabling patch 'test_klp_callbacks_demo' [ 142.117802] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 142.117840] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 142.117841] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 142.119215] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 143.070935] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 143.071035] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 143.071037] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 143.071039] livepatch: 'test_klp_callbacks_demo': patching complete [ 143.141657] % modprobe test_klp_callbacks_mod [ 143.143195] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 143.143198] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 143.143200] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 143.143236] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 143.144563] % rmmod test_klp_callbacks_mod [ 143.145857] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 143.145873] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 143.145875] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 143.145876] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 143.220815] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 143.220851] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 143.220872] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 143.220873] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 143.220875] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 144.031007] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 144.032819] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 144.032821] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 144.032822] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 144.130433] % rmmod test_klp_callbacks_demo [ 144.211697] % rmmod test_klp_callbacks_busy [ 144.213003] test_klp_callbacks_busy: test_klp_callbacks_busy_exit [ 144.308603] ===== TEST: busy target module ===== [ 144.311786] % modprobe test_klp_callbacks_busy block_transition=Y [ 144.313186] test_klp_callbacks_busy: test_klp_callbacks_busy_init [ 144.313190] test_klp_callbacks_busy: busymod_work_func enter [ 144.316644] % modprobe test_klp_callbacks_demo [ 144.318094] livepatch: enabling patch 'test_klp_callbacks_demo' [ 144.318095] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 144.318115] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 144.318116] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 144.319516] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 144.324787] % modprobe test_klp_callbacks_mod [ 144.326157] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 144.326159] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 144.326174] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 144.327454] % rmmod test_klp_callbacks_mod [ 144.328546] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 144.328561] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 144.328563] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 144.410842] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 144.410861] livepatch: 'test_klp_callbacks_demo': reversing transition from patching to unpatching [ 144.410966] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 146.990932] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 146.992683] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 146.992685] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 146.992687] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 147.033638] % rmmod test_klp_callbacks_demo [ 147.121645] % rmmod test_klp_callbacks_busy [ 147.130314] test_klp_callbacks_busy: busymod_work_func exit [ 147.130323] test_klp_callbacks_busy: test_klp_callbacks_busy_exit [ 147.208177] ===== TEST: multiple livepatches ===== [ 147.211079] % modprobe test_klp_callbacks_demo [ 147.212707] livepatch: enabling patch 'test_klp_callbacks_demo' [ 147.212710] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 147.212730] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 147.212731] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 148.031059] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 148.031160] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 148.031162] livepatch: 'test_klp_callbacks_demo': patching complete [ 148.132098] % modprobe test_klp_callbacks_demo2 [ 148.133641] livepatch: enabling patch 'test_klp_callbacks_demo2' [ 148.133644] livepatch: 'test_klp_callbacks_demo2': initializing patching transition [ 148.133664] test_klp_callbacks_demo2: pre_patch_callback: vmlinux [ 148.133666] livepatch: 'test_klp_callbacks_demo2': starting patching transition [ 149.151067] livepatch: 'test_klp_callbacks_demo2': completing patching transition [ 149.151184] test_klp_callbacks_demo2: post_patch_callback: vmlinux [ 149.151186] livepatch: 'test_klp_callbacks_demo2': patching complete [ 149.152975] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled [ 149.152995] livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition [ 149.153015] test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux [ 149.153016] livepatch: 'test_klp_callbacks_demo2': starting unpatching transition [ 149.951022] livepatch: 'test_klp_callbacks_demo2': completing unpatching transition [ 149.951125] test_klp_callbacks_demo2: post_unpatch_callback: vmlinux [ 149.951127] livepatch: 'test_klp_callbacks_demo2': unpatching complete [ 149.960854] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 149.960873] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 149.960888] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 149.960890] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 150.991050] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 150.991152] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 150.991154] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 151.071631] % rmmod test_klp_callbacks_demo2 [ 151.131726] % rmmod test_klp_callbacks_demo [ 151.229250] ===== TEST: atomic replace ===== [ 151.232455] % modprobe test_klp_callbacks_demo [ 151.234085] livepatch: enabling patch 'test_klp_callbacks_demo' [ 151.234087] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 151.234107] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 151.234108] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 152.031077] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 152.031231] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 152.031233] livepatch: 'test_klp_callbacks_demo': patching complete [ 152.052914] % modprobe test_klp_callbacks_demo2 replace=1 [ 152.054593] livepatch: enabling patch 'test_klp_callbacks_demo2' [ 152.054595] livepatch: 'test_klp_callbacks_demo2': initializing patching transition [ 152.054616] test_klp_callbacks_demo2: pre_patch_callback: vmlinux [ 152.054618] livepatch: 'test_klp_callbacks_demo2': starting patching transition [ 153.071103] livepatch: 'test_klp_callbacks_demo2': completing patching transition [ 153.071224] test_klp_callbacks_demo2: post_patch_callback: vmlinux [ 153.071226] livepatch: 'test_klp_callbacks_demo2': patching complete [ 153.073798] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled [ 153.073819] livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition [ 153.073840] test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux [ 153.073841] livepatch: 'test_klp_callbacks_demo2': starting unpatching transition [ 154.031008] livepatch: 'test_klp_callbacks_demo2': completing unpatching transition [ 154.031113] test_klp_callbacks_demo2: post_unpatch_callback: vmlinux [ 154.031116] livepatch: 'test_klp_callbacks_demo2': unpatching complete [ 154.084458] % rmmod test_klp_callbacks_demo2 [ 154.161744] % rmmod test_klp_callbacks_demo [ 154.245192] livepatch: kernel.ftrace_enabled = 1 [ 154.253557] ===== TEST: basic shadow variable API ===== [ 154.256693] % modprobe test_klp_shadow_vars [ 154.258215] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 [ 154.258218] test_klp_shadow_vars: got expected NULL result [ 154.258220] test_klp_shadow_vars: shadow_ctor: PTR3 -> PTR2 [ 154.258221] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 [ 154.258224] test_klp_shadow_vars: shadow_ctor: PTR6 -> PTR5 [ 154.258226] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR1, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR5 = PTR6 [ 154.258228] test_klp_shadow_vars: shadow_ctor: PTR8 -> PTR7 [ 154.258229] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 [ 154.258232] test_klp_shadow_vars: shadow_ctor: PTR11 -> PTR10 [ 154.258233] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR10 = PTR11 [ 154.258235] test_klp_shadow_vars: shadow_ctor: PTR13 -> PTR12 [ 154.258236] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 [ 154.258239] test_klp_shadow_vars: shadow_ctor: PTR16 -> PTR15 [ 154.258240] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR14, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR15 = PTR16 [ 154.258242] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR3 [ 154.258243] test_klp_shadow_vars: got expected PTR3 -> PTR2 result [ 154.258244] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 [ 154.258246] test_klp_shadow_vars: got expected PTR6 -> PTR5 result [ 154.258268] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR8 [ 154.258269] test_klp_shadow_vars: got expected PTR8 -> PTR7 result [ 154.258270] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 [ 154.258271] test_klp_shadow_vars: got expected PTR11 -> PTR10 result [ 154.258273] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR13 [ 154.258274] test_klp_shadow_vars: got expected PTR13 -> PTR12 result [ 154.258275] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 [ 154.258276] test_klp_shadow_vars: got expected PTR16 -> PTR15 result [ 154.258278] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 [ 154.258280] test_klp_shadow_vars: got expected PTR3 -> PTR2 result [ 154.258281] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 [ 154.258283] test_klp_shadow_vars: got expected PTR8 -> PTR7 result [ 154.258284] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 [ 154.258286] test_klp_shadow_vars: got expected PTR13 -> PTR12 result [ 154.258287] test_klp_shadow_vars: shadow_dtor(obj=PTR1, shadow_data=PTR3) [ 154.258289] test_klp_shadow_vars: klp_shadow_free(obj=PTR1, id=0x1234, dtor=PTR17) [ 154.258290] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 [ 154.258292] test_klp_shadow_vars: got expected NULL result [ 154.258292] test_klp_shadow_vars: shadow_dtor(obj=PTR9, shadow_data=PTR8) [ 154.258294] test_klp_shadow_vars: klp_shadow_free(obj=PTR9, id=0x1234, dtor=PTR17) [ 154.258295] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR0 [ 154.258297] test_klp_shadow_vars: got expected NULL result [ 154.258297] test_klp_shadow_vars: shadow_dtor(obj=PTR14, shadow_data=PTR13) [ 154.258299] test_klp_shadow_vars: klp_shadow_free(obj=PTR14, id=0x1234, dtor=PTR17) [ 154.258300] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR0 [ 154.258301] test_klp_shadow_vars: got expected NULL result [ 154.258302] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 [ 154.258303] test_klp_shadow_vars: got expected PTR6 -> PTR5 result [ 154.258304] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 [ 154.258306] test_klp_shadow_vars: got expected PTR11 -> PTR10 result [ 154.258307] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 [ 154.258308] test_klp_shadow_vars: got expected PTR16 -> PTR15 result [ 154.258317] test_klp_shadow_vars: klp_shadow_free_all(id=0x1235, dtor=PTR0) [ 154.258318] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR0 [ 154.258319] test_klp_shadow_vars: got expected NULL result [ 154.258320] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR0 [ 154.258321] test_klp_shadow_vars: got expected NULL result [ 154.258322] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR0 [ 154.258323] test_klp_shadow_vars: got expected NULL result [ 154.259549] % rmmod test_klp_shadow_vars [ 154.364539] livepatch: kernel.ftrace_enabled = 1 [ 154.373051] ===== TEST: system state modification ===== [ 154.376288] % modprobe test_klp_state [ 154.377808] livepatch: enabling patch 'test_klp_state' [ 154.377810] livepatch: 'test_klp_state': initializing patching transition [ 154.377832] test_klp_state: pre_patch_callback: vmlinux [ 154.377833] test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel [ 154.377834] livepatch: 'test_klp_state': starting patching transition [ 155.951098] livepatch: 'test_klp_state': completing patching transition [ 155.951196] test_klp_state: post_patch_callback: vmlinux [ 155.951198] test_klp_state: fix_console_loglevel: fixing console_loglevel [ 155.951199] livepatch: 'test_klp_state': patching complete [ 156.005967] % echo 0 > /sys/kernel/livepatch/test_klp_state/enabled [ 156.005986] livepatch: 'test_klp_state': initializing unpatching transition [ 156.006003] test_klp_state: pre_unpatch_callback: vmlinux [ 156.006004] test_klp_state: restore_console_loglevel: restoring console_loglevel [ 156.006005] livepatch: 'test_klp_state': starting unpatching transition [ 156.991099] livepatch: 'test_klp_state': completing unpatching transition [ 156.991197] test_klp_state: post_unpatch_callback: vmlinux [ 156.991199] test_klp_state: free_loglevel_state: freeing space for the stored console_loglevel [ 156.991201] livepatch: 'test_klp_state': unpatching complete [ 157.016096] % rmmod test_klp_state [ 157.119439] ===== TEST: taking over system state modification ===== [ 157.122658] % modprobe test_klp_state [ 157.124299] livepatch: enabling patch 'test_klp_state' [ 157.124302] livepatch: 'test_klp_state': initializing patching transition [ 157.124324] test_klp_state: pre_patch_callback: vmlinux [ 157.124325] test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel [ 157.124326] livepatch: 'test_klp_state': starting patching transition [ 158.031004] livepatch: 'test_klp_state': completing patching transition [ 158.031105] test_klp_state: post_patch_callback: vmlinux [ 158.031107] test_klp_state: fix_console_loglevel: fixing console_loglevel [ 158.031109] livepatch: 'test_klp_state': patching complete [ 158.044647] % modprobe test_klp_state2 [ 158.046174] livepatch: enabling patch 'test_klp_state2' [ 158.046176] livepatch: 'test_klp_state2': initializing patching transition [ 158.046194] test_klp_state2: pre_patch_callback: vmlinux [ 158.046195] test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated [ 158.046197] livepatch: 'test_klp_state2': starting patching transition [ 158.991060] livepatch: 'test_klp_state2': completing patching transition [ 158.991184] test_klp_state2: post_patch_callback: vmlinux [ 158.991185] test_klp_state2: fix_console_loglevel: taking over the console_loglevel change [ 158.991186] livepatch: 'test_klp_state2': patching complete [ 159.065518] % rmmod test_klp_state [ 159.130779] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 159.130797] livepatch: 'test_klp_state2': initializing unpatching transition [ 159.130818] test_klp_state2: pre_unpatch_callback: vmlinux [ 159.130819] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 159.130820] livepatch: 'test_klp_state2': starting unpatching transition [ 160.911085] livepatch: 'test_klp_state2': completing unpatching transition [ 160.911224] test_klp_state2: post_unpatch_callback: vmlinux [ 160.911226] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 160.911227] livepatch: 'test_klp_state2': unpatching complete [ 160.948036] % rmmod test_klp_state2 [ 161.059424] ===== TEST: compatible cumulative livepatches ===== [ 161.062474] % modprobe test_klp_state2 [ 161.063931] livepatch: enabling patch 'test_klp_state2' [ 161.063934] livepatch: 'test_klp_state2': initializing patching transition [ 161.063957] test_klp_state2: pre_patch_callback: vmlinux [ 161.063958] test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel [ 161.063959] livepatch: 'test_klp_state2': starting patching transition [ 162.671079] livepatch: 'test_klp_state2': completing patching transition [ 162.671184] test_klp_state2: post_patch_callback: vmlinux [ 162.671186] test_klp_state2: fix_console_loglevel: fixing console_loglevel [ 162.671188] livepatch: 'test_klp_state2': patching complete [ 162.694355] % modprobe test_klp_state3 [ 162.695852] livepatch: enabling patch 'test_klp_state3' [ 162.695855] livepatch: 'test_klp_state3': initializing patching transition [ 162.695877] test_klp_state3: pre_patch_callback: vmlinux [ 162.695878] test_klp_state3: allocate_loglevel_state: space to store console_loglevel already allocated [ 162.695879] livepatch: 'test_klp_state3': starting patching transition [ 163.951036] livepatch: 'test_klp_state3': completing patching transition [ 163.951139] test_klp_state3: post_patch_callback: vmlinux [ 163.951141] test_klp_state3: fix_console_loglevel: taking over the console_loglevel change [ 163.951142] livepatch: 'test_klp_state3': patching complete [ 164.019372] % rmmod test_klp_state2 [ 164.093821] % modprobe test_klp_state2 [ 164.095460] livepatch: enabling patch 'test_klp_state2' [ 164.095463] livepatch: 'test_klp_state2': initializing patching transition [ 164.095484] test_klp_state2: pre_patch_callback: vmlinux [ 164.095485] test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated [ 164.095487] livepatch: 'test_klp_state2': starting patching transition [ 165.871122] livepatch: 'test_klp_state2': completing patching transition [ 165.871280] test_klp_state2: post_patch_callback: vmlinux [ 165.871281] test_klp_state2: fix_console_loglevel: taking over the console_loglevel change [ 165.871283] livepatch: 'test_klp_state2': patching complete [ 165.926447] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 165.926486] livepatch: 'test_klp_state2': initializing unpatching transition [ 165.926507] test_klp_state2: pre_unpatch_callback: vmlinux [ 165.926508] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 165.926509] livepatch: 'test_klp_state2': starting unpatching transition [ 166.831076] livepatch: 'test_klp_state2': completing unpatching transition [ 166.831199] test_klp_state2: post_unpatch_callback: vmlinux [ 166.831201] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 166.831203] livepatch: 'test_klp_state2': unpatching complete [ 166.835243] % rmmod test_klp_state2 [ 166.901777] % rmmod test_klp_state3 [ 166.969742] ===== TEST: incompatible cumulative livepatches ===== [ 166.972899] % modprobe test_klp_state2 [ 166.974399] livepatch: enabling patch 'test_klp_state2' [ 166.974401] livepatch: 'test_klp_state2': initializing patching transition [ 166.974420] test_klp_state2: pre_patch_callback: vmlinux [ 166.974422] test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel [ 166.974423] livepatch: 'test_klp_state2': starting patching transition [ 168.681063] livepatch: 'test_klp_state2': completing patching transition [ 168.681165] test_klp_state2: post_patch_callback: vmlinux [ 168.681167] test_klp_state2: fix_console_loglevel: fixing console_loglevel [ 168.681169] livepatch: 'test_klp_state2': patching complete [ 168.703685] % modprobe test_klp_state [ 168.705124] livepatch: Livepatch patch (test_klp_state) is not compatible with the already installed livepatches. [ 168.860784] modprobe: ERROR: could not insert 'test_klp_state': Invalid argument [ 168.860833] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 168.860851] livepatch: 'test_klp_state2': initializing unpatching transition [ 168.860909] test_klp_state2: pre_unpatch_callback: vmlinux [ 168.860910] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 168.860911] livepatch: 'test_klp_state2': starting unpatching transition [ 169.871047] livepatch: 'test_klp_state2': completing unpatching transition [ 169.871186] test_klp_state2: post_unpatch_callback: vmlinux [ 169.871188] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 169.871189] livepatch: 'test_klp_state2': unpatching complete [ 169.971989] % rmmod test_klp_state2 [ 170.114423] livepatch: kernel.ftrace_enabled = 1 [ 170.122713] ===== TEST: livepatch interaction with ftrace_enabled sysctl ===== [ 170.124491] livepatch: kernel.ftrace_enabled = 0 [ 170.124552] % modprobe test_klp_livepatch [ 170.125916] livepatch: enabling patch 'test_klp_livepatch' [ 170.125918] livepatch: 'test_klp_livepatch': initializing patching transition [ 170.125942] livepatch: failed to register ftrace handler for function 'cmdline_proc_show' (-16) [ 170.125945] livepatch: failed to patch object 'vmlinux' [ 170.125946] livepatch: failed to enable patch 'test_klp_livepatch' [ 170.125947] livepatch: 'test_klp_livepatch': canceling patching transition, going to unpatch [ 170.125948] livepatch: 'test_klp_livepatch': completing unpatching transition [ 170.126056] livepatch: 'test_klp_livepatch': unpatching complete [ 170.260823] modprobe: ERROR: could not insert 'test_klp_livepatch': Device or resource busy [ 170.262584] livepatch: kernel.ftrace_enabled = 1 [ 170.265470] % modprobe test_klp_livepatch [ 170.266711] livepatch: enabling patch 'test_klp_livepatch' [ 170.266712] livepatch: 'test_klp_livepatch': initializing patching transition [ 170.267782] livepatch: 'test_klp_livepatch': starting patching transition [ 171.791076] livepatch: 'test_klp_livepatch': completing patching transition [ 171.791226] livepatch: 'test_klp_livepatch': patching complete [ 171.797053] livepatch: sysctl: setting key "kernel.ftrace_enabled": Device or resource busy [ 171.798001] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 171.798020] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 171.798035] livepatch: 'test_klp_livepatch': starting unpatching transition [ 172.831042] livepatch: 'test_klp_livepatch': completing unpatching transition [ 172.832563] livepatch: 'test_klp_livepatch': unpatching complete [ 172.908336] % rmmod test_klp_livepatch [ 172.983414] livepatch: kernel.ftrace_enabled = 1 [ 172.991780] ===== TEST: sysfs test ===== [ 172.994796] % modprobe test_klp_livepatch [ 172.996248] livepatch: enabling patch 'test_klp_livepatch' [ 172.996250] livepatch: 'test_klp_livepatch': initializing patching transition [ 172.997482] livepatch: 'test_klp_livepatch': starting patching transition [ 174.671056] livepatch: 'test_klp_livepatch': completing patching transition [ 174.671194] livepatch: 'test_klp_livepatch': patching complete [ 174.734417] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 174.734432] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 174.734466] livepatch: 'test_klp_livepatch': starting unpatching transition [ 175.711081] livepatch: 'test_klp_livepatch': completing unpatching transition [ 175.712575] livepatch: 'test_klp_livepatch': unpatching complete [ 175.744085] % rmmod test_klp_livepatch [ 175.808160] ===== TEST: sysfs test object/patched ===== [ 175.810980] % modprobe test_klp_callbacks_demo [ 175.812208] livepatch: enabling patch 'test_klp_callbacks_demo' [ 175.812210] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 175.812230] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 175.812231] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 176.911051] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 176.911161] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 176.911163] livepatch: 'test_klp_callbacks_demo': patching complete [ 176.934731] % modprobe test_klp_callbacks_mod [ 176.935992] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 176.935994] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 176.935996] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 176.936013] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 176.937945] % rmmod test_klp_callbacks_mod [ 176.938946] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 176.938961] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 176.938963] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 176.938964] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 176.991789] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 176.991808] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 176.991828] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 176.991830] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 178.191025] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 178.191124] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 178.191126] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 178.202777] % rmmod test_klp_callbacks_demo [ 178.318263] livepatch: kernel.ftrace_enabled = 1 [ 178.326039] ===== TEST: basic function patching ===== [ 178.328835] % modprobe test_klp_livepatch [ 178.330156] livepatch: enabling patch 'test_klp_livepatch' [ 178.330158] livepatch: 'test_klp_livepatch': initializing patching transition [ 178.331256] livepatch: 'test_klp_livepatch': starting patching transition [ 179.711061] livepatch: 'test_klp_livepatch': completing patching transition [ 179.711168] livepatch: 'test_klp_livepatch': patching complete [ 179.757176] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 179.757196] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 179.757219] livepatch: 'test_klp_livepatch': starting unpatching transition [ 180.751089] livepatch: 'test_klp_livepatch': completing unpatching transition [ 180.752537] livepatch: 'test_klp_livepatch': unpatching complete [ 180.767212] % rmmod test_klp_livepatch [ 180.830459] ===== TEST: multiple livepatches ===== [ 180.833537] % modprobe test_klp_livepatch [ 180.834932] livepatch: enabling patch 'test_klp_livepatch' [ 180.834933] livepatch: 'test_klp_livepatch': initializing patching transition [ 180.836072] livepatch: 'test_klp_livepatch': starting patching transition [ 181.711030] livepatch: 'test_klp_livepatch': completing patching transition [ 181.711129] livepatch: 'test_klp_livepatch': patching complete [ 181.753931] test_klp_livepatch: this has been live patched [ 181.758075] % modprobe test_klp_atomic_replace replace=0 [ 181.759630] livepatch: enabling patch 'test_klp_atomic_replace' [ 181.759632] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 181.760761] livepatch: 'test_klp_atomic_replace': starting patching transition [ 182.751097] livepatch: 'test_klp_atomic_replace': completing patching transition [ 182.751210] livepatch: 'test_klp_atomic_replace': patching complete [ 182.779987] test_klp_livepatch: this has been live patched [ 182.780949] test_klp_atomic_replace: this has been live patched [ 182.781132] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 182.781152] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 182.781172] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 183.711178] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 183.712627] livepatch: 'test_klp_atomic_replace': unpatching complete [ 183.791173] % rmmod test_klp_atomic_replace [ 183.881579] test_klp_livepatch: this has been live patched [ 183.882598] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 183.882616] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 183.882634] livepatch: 'test_klp_livepatch': starting unpatching transition [ 184.751183] livepatch: 'test_klp_livepatch': completing unpatching transition [ 184.752715] livepatch: 'test_klp_livepatch': unpatching complete [ 184.791884] % rmmod test_klp_livepatch [ 184.921013] ===== TEST: atomic replace livepatch ===== [ 184.924117] % modprobe test_klp_livepatch [ 184.925507] livepatch: enabling patch 'test_klp_livepatch' [ 184.925509] livepatch: 'test_klp_livepatch': initializing patching transition [ 184.926666] livepatch: 'test_klp_livepatch': starting patching transition [ 185.791155] livepatch: 'test_klp_livepatch': completing patching transition [ 185.791263] livepatch: 'test_klp_livepatch': patching complete [ 185.844460] test_klp_livepatch: this has been live patched [ 185.848202] % modprobe test_klp_atomic_replace replace=1 [ 185.849784] livepatch: enabling patch 'test_klp_atomic_replace' [ 185.849786] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 185.850899] livepatch: 'test_klp_atomic_replace': starting patching transition [ 186.751268] livepatch: 'test_klp_atomic_replace': completing patching transition [ 186.752724] livepatch: 'test_klp_atomic_replace': patching complete [ 186.769820] test_klp_atomic_replace: this has been live patched [ 186.771001] % rmmod test_klp_livepatch [ 186.842577] test_klp_atomic_replace: this has been live patched [ 186.842713] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 186.842732] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 186.842752] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 187.711155] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 187.712686] livepatch: 'test_klp_atomic_replace': unpatching complete [ 187.751949] % rmmod test_klp_atomic_replace [ 187.875356] livepatch: kernel.ftrace_enabled = 1 [ 187.883440] ===== TEST: target module before livepatch ===== [ 187.886603] % modprobe test_klp_callbacks_mod [ 187.887986] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 187.891200] % modprobe test_klp_callbacks_demo [ 187.892630] livepatch: enabling patch 'test_klp_callbacks_demo' [ 187.892632] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 187.892658] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 187.892659] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 187.892660] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 189.071175] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 189.071347] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 189.071350] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 189.071351] livepatch: 'test_klp_callbacks_demo': patching complete [ 189.113416] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 189.113437] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 189.113459] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 189.113460] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 189.113461] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 190.831161] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 190.831300] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 190.831303] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 190.831304] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 190.928590] % rmmod test_klp_callbacks_demo [ 190.981743] % rmmod test_klp_callbacks_mod [ 190.982844] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 191.068717] ===== TEST: module_coming notifier ===== [ 191.071881] % modprobe test_klp_callbacks_demo [ 191.073324] livepatch: enabling patch 'test_klp_callbacks_demo' [ 191.073326] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 191.073345] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 191.073347] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 192.761063] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 192.761166] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 192.761168] livepatch: 'test_klp_callbacks_demo': patching complete [ 192.804600] % modprobe test_klp_callbacks_mod [ 192.806035] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 192.806038] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 192.806040] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 192.806058] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 192.806411] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 192.806429] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 192.806450] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 192.806452] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 192.806453] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 193.951153] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 193.951254] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 193.951256] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 193.951257] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 194.016717] % rmmod test_klp_callbacks_demo [ 194.111640] % rmmod test_klp_callbacks_mod [ 194.112834] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 194.179536] ===== TEST: module_going notifier ===== [ 194.182529] % modprobe test_klp_callbacks_mod [ 194.183902] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 194.186979] % modprobe test_klp_callbacks_demo [ 194.188306] livepatch: enabling patch 'test_klp_callbacks_demo' [ 194.188308] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 194.188334] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 194.188336] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 194.188337] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 195.871146] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 195.871247] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 195.871248] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 195.871250] livepatch: 'test_klp_callbacks_demo': patching complete [ 195.917690] % rmmod test_klp_callbacks_mod [ 195.918839] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 195.918874] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 195.918876] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 195.918877] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 196.000811] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 196.000829] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 196.000847] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 196.000848] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 196.831134] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 196.831258] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 196.831276] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 196.909237] % rmmod test_klp_callbacks_demo [ 196.999252] ===== TEST: module_coming and module_going notifiers ===== [ 197.002219] % modprobe test_klp_callbacks_demo [ 197.003720] livepatch: enabling patch 'test_klp_callbacks_demo' [ 197.003722] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 197.003761] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 197.003762] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 197.951097] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 197.951197] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 197.951199] livepatch: 'test_klp_callbacks_demo': patching complete [ 198.023498] % modprobe test_klp_callbacks_mod [ 198.024865] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 198.024868] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 198.024870] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 198.024887] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 198.026043] % rmmod test_klp_callbacks_mod [ 198.027153] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 198.027169] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 198.027171] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 198.027172] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 198.110789] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 198.110807] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 198.110828] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 198.110830] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 199.881138] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 199.881237] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 199.881239] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 199.925505] % rmmod test_klp_callbacks_demo [ 199.999151] ===== TEST: target module not present ===== [ 200.002145] % modprobe test_klp_callbacks_demo [ 200.003699] livepatch: enabling patch 'test_klp_callbacks_demo' [ 200.003701] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 200.003721] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 200.003723] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 200.911124] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 200.911242] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 200.911244] livepatch: 'test_klp_callbacks_demo': patching complete [ 200.919249] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 200.919267] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 200.919288] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 200.919289] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 201.951160] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 201.951277] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 201.951279] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 202.028867] % rmmod test_klp_callbacks_demo [ 202.119054] ===== TEST: pre-patch callback -ENODEV ===== [ 202.122040] % modprobe test_klp_callbacks_mod [ 202.123508] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 202.123862] % modprobe test_klp_callbacks_demo pre_patch_ret=-19 [ 202.125317] livepatch: enabling patch 'test_klp_callbacks_demo' [ 202.125319] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 202.125341] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 202.125342] livepatch: pre-patch callback failed for object 'vmlinux' [ 202.125343] livepatch: failed to enable patch 'test_klp_callbacks_demo' [ 202.125344] livepatch: 'test_klp_callbacks_demo': canceling patching transition, going to unpatch [ 202.125345] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 202.125496] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 202.250789] modprobe: ERROR: could not insert 'test_klp_callbacks_demo': No such device [ 202.251582] % rmmod test_klp_callbacks_mod [ 202.252724] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 202.348771] ===== TEST: module_coming + pre-patch callback -ENODEV ===== [ 202.351804] % modprobe test_klp_callbacks_demo [ 202.353355] livepatch: enabling patch 'test_klp_callbacks_demo' [ 202.353357] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 202.353392] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 202.353393] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 203.951197] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 203.951351] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 203.951353] livepatch: 'test_klp_callbacks_demo': patching complete [ 203.979670] % echo -19 > /sys/module/test_klp_callbacks_demo/parameters/pre_patch_ret [ 203.980548] % modprobe test_klp_callbacks_mod [ 203.981920] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 203.981922] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 203.981924] livepatch: pre-patch callback failed for object 'test_klp_callbacks_mod' [ 203.981925] livepatch: patch 'test_klp_callbacks_demo' failed for module 'test_klp_callbacks_mod', refusing to load module 'test_klp_callbacks_mod' [ 204.130800] modprobe: ERROR: could not insert 'test_klp_callbacks_mod': No such device [ 204.130845] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 204.130862] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 204.130882] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 204.130884] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 205.951235] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 205.951341] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 205.951343] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 206.046975] % rmmod test_klp_callbacks_demo [ 206.128457] ===== TEST: multiple target modules ===== [ 206.131336] % modprobe test_klp_callbacks_busy block_transition=N [ 206.132672] test_klp_callbacks_busy: test_klp_callbacks_busy_init [ 206.132677] test_klp_callbacks_busy: busymod_work_func enter [ 206.132679] test_klp_callbacks_busy: busymod_work_func exit [ 206.135860] % modprobe test_klp_callbacks_demo [ 206.137206] livepatch: enabling patch 'test_klp_callbacks_demo' [ 206.137207] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 206.137228] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 206.137229] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 206.138577] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 207.871214] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 207.871314] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 207.871316] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 207.871318] livepatch: 'test_klp_callbacks_demo': patching complete [ 207.969934] % modprobe test_klp_callbacks_mod [ 207.971401] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 207.971404] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 207.971406] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 207.971423] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 207.972674] % rmmod test_klp_callbacks_mod [ 207.973849] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 207.973866] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 207.973868] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 207.973870] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 208.050976] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 208.050996] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 208.051017] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 208.051018] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 208.051020] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 208.911216] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 208.912965] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 208.912967] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 208.912969] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 208.959486] % rmmod test_klp_callbacks_demo [ 209.071781] % rmmod test_klp_callbacks_busy [ 209.072943] test_klp_callbacks_busy: test_klp_callbacks_busy_exit [ 209.149873] ===== TEST: busy target module ===== [ 209.152833] % modprobe test_klp_callbacks_busy block_transition=Y [ 209.154258] test_klp_callbacks_busy: test_klp_callbacks_busy_init [ 209.154262] test_klp_callbacks_busy: busymod_work_func enter [ 209.157628] % modprobe test_klp_callbacks_demo [ 209.159018] livepatch: enabling patch 'test_klp_callbacks_demo' [ 209.159020] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 209.159040] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 209.159041] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 209.160430] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 209.165518] % modprobe test_klp_callbacks_mod [ 209.166893] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 209.166896] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 209.166914] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 209.168092] % rmmod test_klp_callbacks_mod [ 209.169182] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 209.169198] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 209.169200] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 209.250960] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 209.250978] livepatch: 'test_klp_callbacks_demo': reversing transition from patching to unpatching [ 209.251083] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 211.871203] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 211.872965] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 211.872967] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 211.872969] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 211.971835] % rmmod test_klp_callbacks_demo [ 212.051698] % rmmod test_klp_callbacks_busy [ 212.090506] test_klp_callbacks_busy: busymod_work_func exit [ 212.090513] test_klp_callbacks_busy: test_klp_callbacks_busy_exit [ 212.169096] ===== TEST: multiple livepatches ===== [ 212.172221] % modprobe test_klp_callbacks_demo [ 212.173625] livepatch: enabling patch 'test_klp_callbacks_demo' [ 212.173627] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 212.173645] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 212.173646] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 213.881119] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 213.881238] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 213.881240] livepatch: 'test_klp_callbacks_demo': patching complete [ 213.904735] % modprobe test_klp_callbacks_demo2 [ 213.906252] livepatch: enabling patch 'test_klp_callbacks_demo2' [ 213.906254] livepatch: 'test_klp_callbacks_demo2': initializing patching transition [ 213.906291] test_klp_callbacks_demo2: pre_patch_callback: vmlinux [ 213.906292] livepatch: 'test_klp_callbacks_demo2': starting patching transition [ 214.911228] livepatch: 'test_klp_callbacks_demo2': completing patching transition [ 214.911330] test_klp_callbacks_demo2: post_patch_callback: vmlinux [ 214.911332] livepatch: 'test_klp_callbacks_demo2': patching complete [ 214.923290] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled [ 214.923309] livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition [ 214.923323] test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux [ 214.923324] livepatch: 'test_klp_callbacks_demo2': starting unpatching transition [ 215.951189] livepatch: 'test_klp_callbacks_demo2': completing unpatching transition [ 215.951289] test_klp_callbacks_demo2: post_unpatch_callback: vmlinux [ 215.951291] livepatch: 'test_klp_callbacks_demo2': unpatching complete [ 216.032305] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 216.032322] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 216.032338] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 216.032339] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 216.911208] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 216.911327] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 216.911329] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 216.941200] % rmmod test_klp_callbacks_demo2 [ 217.011815] % rmmod test_klp_callbacks_demo [ 217.089875] ===== TEST: atomic replace ===== [ 217.092945] % modprobe test_klp_callbacks_demo [ 217.094433] livepatch: enabling patch 'test_klp_callbacks_demo' [ 217.094436] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 217.094455] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 217.094457] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 217.951266] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 217.951371] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 217.951372] livepatch: 'test_klp_callbacks_demo': patching complete [ 218.014048] % modprobe test_klp_callbacks_demo2 replace=1 [ 218.015488] livepatch: enabling patch 'test_klp_callbacks_demo2' [ 218.015491] livepatch: 'test_klp_callbacks_demo2': initializing patching transition [ 218.015512] test_klp_callbacks_demo2: pre_patch_callback: vmlinux [ 218.015514] livepatch: 'test_klp_callbacks_demo2': starting patching transition [ 219.631259] livepatch: 'test_klp_callbacks_demo2': completing patching transition [ 219.631381] test_klp_callbacks_demo2: post_patch_callback: vmlinux [ 219.631383] livepatch: 'test_klp_callbacks_demo2': patching complete [ 219.643212] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled [ 219.643241] livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition [ 219.643273] test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux [ 219.643274] livepatch: 'test_klp_callbacks_demo2': starting unpatching transition [ 220.831217] livepatch: 'test_klp_callbacks_demo2': completing unpatching transition [ 220.831316] test_klp_callbacks_demo2: post_unpatch_callback: vmlinux [ 220.831318] livepatch: 'test_klp_callbacks_demo2': unpatching complete [ 220.853623] % rmmod test_klp_callbacks_demo2 [ 220.931690] % rmmod test_klp_callbacks_demo [ 221.032866] livepatch: kernel.ftrace_enabled = 1 [ 221.041249] ===== TEST: basic shadow variable API ===== [ 221.044342] % modprobe test_klp_shadow_vars [ 221.046005] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 [ 221.046008] test_klp_shadow_vars: got expected NULL result [ 221.046010] test_klp_shadow_vars: shadow_ctor: PTR3 -> PTR2 [ 221.046011] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 [ 221.046015] test_klp_shadow_vars: shadow_ctor: PTR6 -> PTR5 [ 221.046016] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR1, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR5 = PTR6 [ 221.046019] test_klp_shadow_vars: shadow_ctor: PTR8 -> PTR7 [ 221.046020] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 [ 221.046022] test_klp_shadow_vars: shadow_ctor: PTR11 -> PTR10 [ 221.046024] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR10 = PTR11 [ 221.046026] test_klp_shadow_vars: shadow_ctor: PTR13 -> PTR12 [ 221.046028] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 [ 221.046030] test_klp_shadow_vars: shadow_ctor: PTR16 -> PTR15 [ 221.046031] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR14, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR15 = PTR16 [ 221.046034] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR3 [ 221.046035] test_klp_shadow_vars: got expected PTR3 -> PTR2 result [ 221.046036] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 [ 221.046038] test_klp_shadow_vars: got expected PTR6 -> PTR5 result [ 221.046039] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR8 [ 221.046041] test_klp_shadow_vars: got expected PTR8 -> PTR7 result [ 221.046042] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 [ 221.046043] test_klp_shadow_vars: got expected PTR11 -> PTR10 result [ 221.046045] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR13 [ 221.046046] test_klp_shadow_vars: got expected PTR13 -> PTR12 result [ 221.046047] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 [ 221.046049] test_klp_shadow_vars: got expected PTR16 -> PTR15 result [ 221.046050] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 [ 221.046052] test_klp_shadow_vars: got expected PTR3 -> PTR2 result [ 221.046054] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 [ 221.046056] test_klp_shadow_vars: got expected PTR8 -> PTR7 result [ 221.046057] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 [ 221.046059] test_klp_shadow_vars: got expected PTR13 -> PTR12 result [ 221.046061] test_klp_shadow_vars: shadow_dtor(obj=PTR1, shadow_data=PTR3) [ 221.046063] test_klp_shadow_vars: klp_shadow_free(obj=PTR1, id=0x1234, dtor=PTR17) [ 221.046064] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 [ 221.046066] test_klp_shadow_vars: got expected NULL result [ 221.046067] test_klp_shadow_vars: shadow_dtor(obj=PTR9, shadow_data=PTR8) [ 221.046068] test_klp_shadow_vars: klp_shadow_free(obj=PTR9, id=0x1234, dtor=PTR17) [ 221.046070] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR0 [ 221.046071] test_klp_shadow_vars: got expected NULL result [ 221.046072] test_klp_shadow_vars: shadow_dtor(obj=PTR14, shadow_data=PTR13) [ 221.046073] test_klp_shadow_vars: klp_shadow_free(obj=PTR14, id=0x1234, dtor=PTR17) [ 221.046075] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR0 [ 221.046076] test_klp_shadow_vars: got expected NULL result [ 221.046077] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 [ 221.046079] test_klp_shadow_vars: got expected PTR6 -> PTR5 result [ 221.046080] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 [ 221.046081] test_klp_shadow_vars: got expected PTR11 -> PTR10 result [ 221.046083] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 [ 221.046084] test_klp_shadow_vars: got expected PTR16 -> PTR15 result [ 221.046092] test_klp_shadow_vars: klp_shadow_free_all(id=0x1235, dtor=PTR0) [ 221.046093] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR0 [ 221.046094] test_klp_shadow_vars: got expected NULL result [ 221.046095] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR0 [ 221.046097] test_klp_shadow_vars: got expected NULL result [ 221.046098] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR0 [ 221.046099] test_klp_shadow_vars: got expected NULL result [ 221.047460] % rmmod test_klp_shadow_vars [ 221.132199] livepatch: kernel.ftrace_enabled = 1 [ 221.140198] ===== TEST: system state modification ===== [ 221.143166] % modprobe test_klp_state [ 221.144614] livepatch: enabling patch 'test_klp_state' [ 221.144616] livepatch: 'test_klp_state': initializing patching transition [ 221.144637] test_klp_state: pre_patch_callback: vmlinux [ 221.144638] test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel [ 221.144639] livepatch: 'test_klp_state': starting patching transition [ 222.111272] livepatch: 'test_klp_state': completing patching transition [ 222.111377] test_klp_state: post_patch_callback: vmlinux [ 222.111379] test_klp_state: fix_console_loglevel: fixing console_loglevel [ 222.111381] livepatch: 'test_klp_state': patching complete [ 222.162434] % echo 0 > /sys/kernel/livepatch/test_klp_state/enabled [ 222.162453] livepatch: 'test_klp_state': initializing unpatching transition [ 222.162474] test_klp_state: pre_unpatch_callback: vmlinux [ 222.162476] test_klp_state: restore_console_loglevel: restoring console_loglevel [ 222.162477] livepatch: 'test_klp_state': starting unpatching transition [ 223.951243] livepatch: 'test_klp_state': completing unpatching transition [ 223.951343] test_klp_state: post_unpatch_callback: vmlinux [ 223.951345] test_klp_state: free_loglevel_state: freeing space for the stored console_loglevel [ 223.951346] livepatch: 'test_klp_state': unpatching complete [ 223.978524] % rmmod test_klp_state [ 224.049861] ===== TEST: taking over system state modification ===== [ 224.052982] % modprobe test_klp_state [ 224.054535] livepatch: enabling patch 'test_klp_state' [ 224.054537] livepatch: 'test_klp_state': initializing patching transition [ 224.054558] test_klp_state: pre_patch_callback: vmlinux [ 224.054559] test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel [ 224.054561] livepatch: 'test_klp_state': starting patching transition [ 224.921252] livepatch: 'test_klp_state': completing patching transition [ 224.921353] test_klp_state: post_patch_callback: vmlinux [ 224.921355] test_klp_state: fix_console_loglevel: fixing console_loglevel [ 224.921357] livepatch: 'test_klp_state': patching complete [ 224.974637] % modprobe test_klp_state2 [ 224.976246] livepatch: enabling patch 'test_klp_state2' [ 224.976248] livepatch: 'test_klp_state2': initializing patching transition [ 224.976275] test_klp_state2: pre_patch_callback: vmlinux [ 224.976276] test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated [ 224.976278] livepatch: 'test_klp_state2': starting patching transition [ 226.031256] livepatch: 'test_klp_state2': completing patching transition [ 226.031388] test_klp_state2: post_patch_callback: vmlinux [ 226.031389] test_klp_state2: fix_console_loglevel: taking over the console_loglevel change [ 226.031390] livepatch: 'test_klp_state2': patching complete [ 226.097150] % rmmod test_klp_state [ 226.170953] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 226.170972] livepatch: 'test_klp_state2': initializing unpatching transition [ 226.170994] test_klp_state2: pre_unpatch_callback: vmlinux [ 226.170995] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 226.170996] livepatch: 'test_klp_state2': starting unpatching transition [ 227.951209] livepatch: 'test_klp_state2': completing unpatching transition [ 227.951314] test_klp_state2: post_unpatch_callback: vmlinux [ 227.951317] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 227.951318] livepatch: 'test_klp_state2': unpatching complete [ 227.987229] % rmmod test_klp_state2 [ 228.048401] ===== TEST: compatible cumulative livepatches ===== [ 228.051472] % modprobe test_klp_state2 [ 228.052836] livepatch: enabling patch 'test_klp_state2' [ 228.052839] livepatch: 'test_klp_state2': initializing patching transition [ 228.052858] test_klp_state2: pre_patch_callback: vmlinux [ 228.052860] test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel [ 228.052861] livepatch: 'test_klp_state2': starting patching transition [ 229.071292] livepatch: 'test_klp_state2': completing patching transition [ 229.071407] test_klp_state2: post_patch_callback: vmlinux [ 229.071409] test_klp_state2: fix_console_loglevel: fixing console_loglevel [ 229.071410] livepatch: 'test_klp_state2': patching complete [ 229.174501] % modprobe test_klp_state3 [ 229.175964] livepatch: enabling patch 'test_klp_state3' [ 229.175966] livepatch: 'test_klp_state3': initializing patching transition [ 229.175984] test_klp_state3: pre_patch_callback: vmlinux [ 229.175985] test_klp_state3: allocate_loglevel_state: space to store console_loglevel already allocated [ 229.175986] livepatch: 'test_klp_state3': starting patching transition [ 230.031287] livepatch: 'test_klp_state3': completing patching transition [ 230.031407] test_klp_state3: post_patch_callback: vmlinux [ 230.031409] test_klp_state3: fix_console_loglevel: taking over the console_loglevel change [ 230.031410] livepatch: 'test_klp_state3': patching complete [ 230.092633] % rmmod test_klp_state2 [ 230.174017] % modprobe test_klp_state2 [ 230.175415] livepatch: enabling patch 'test_klp_state2' [ 230.175416] livepatch: 'test_klp_state2': initializing patching transition [ 230.175437] test_klp_state2: pre_patch_callback: vmlinux [ 230.175438] test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated [ 230.175453] livepatch: 'test_klp_state2': starting patching transition [ 231.871289] livepatch: 'test_klp_state2': completing patching transition [ 231.871392] test_klp_state2: post_patch_callback: vmlinux [ 231.871393] test_klp_state2: fix_console_loglevel: taking over the console_loglevel change [ 231.871394] livepatch: 'test_klp_state2': patching complete [ 231.902873] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 231.902893] livepatch: 'test_klp_state2': initializing unpatching transition [ 231.902909] test_klp_state2: pre_unpatch_callback: vmlinux [ 231.902910] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 231.902911] livepatch: 'test_klp_state2': starting unpatching transition [ 232.831270] livepatch: 'test_klp_state2': completing unpatching transition [ 232.831371] test_klp_state2: post_unpatch_callback: vmlinux [ 232.831373] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 232.831374] livepatch: 'test_klp_state2': unpatching complete [ 232.912312] % rmmod test_klp_state2 [ 232.961704] % rmmod test_klp_state3 [ 233.039460] ===== TEST: incompatible cumulative livepatches ===== [ 233.042189] % modprobe test_klp_state2 [ 233.043520] livepatch: enabling patch 'test_klp_state2' [ 233.043522] livepatch: 'test_klp_state2': initializing patching transition [ 233.043542] test_klp_state2: pre_patch_callback: vmlinux [ 233.043543] test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel [ 233.043545] livepatch: 'test_klp_state2': starting patching transition [ 234.191241] livepatch: 'test_klp_state2': completing patching transition [ 234.191348] test_klp_state2: post_patch_callback: vmlinux [ 234.191365] test_klp_state2: fix_console_loglevel: fixing console_loglevel [ 234.191368] livepatch: 'test_klp_state2': patching complete [ 234.263631] % modprobe test_klp_state [ 234.265068] livepatch: Livepatch patch (test_klp_state) is not compatible with the already installed livepatches. [ 234.380932] modprobe: ERROR: could not insert 'test_klp_state': Invalid argument [ 234.380979] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 234.380997] livepatch: 'test_klp_state2': initializing unpatching transition [ 234.381018] test_klp_state2: pre_unpatch_callback: vmlinux [ 234.381019] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 234.381020] livepatch: 'test_klp_state2': starting unpatching transition [ 235.951273] livepatch: 'test_klp_state2': completing unpatching transition [ 235.951373] test_klp_state2: post_unpatch_callback: vmlinux [ 235.951375] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 235.951376] livepatch: 'test_klp_state2': unpatching complete [ 235.994953] % rmmod test_klp_state2 [ 236.093180] livepatch: kernel.ftrace_enabled = 1 [ 236.101310] ===== TEST: livepatch interaction with ftrace_enabled sysctl ===== [ 236.102950] livepatch: kernel.ftrace_enabled = 0 [ 236.103030] % modprobe test_klp_livepatch [ 236.104411] livepatch: enabling patch 'test_klp_livepatch' [ 236.104414] livepatch: 'test_klp_livepatch': initializing patching transition [ 236.104437] livepatch: failed to register ftrace handler for function 'cmdline_proc_show' (-16) [ 236.104439] livepatch: failed to patch object 'vmlinux' [ 236.104440] livepatch: failed to enable patch 'test_klp_livepatch' [ 236.104441] livepatch: 'test_klp_livepatch': canceling patching transition, going to unpatch [ 236.104442] livepatch: 'test_klp_livepatch': completing unpatching transition [ 236.104560] livepatch: 'test_klp_livepatch': unpatching complete [ 236.260929] modprobe: ERROR: could not insert 'test_klp_livepatch': Device or resource busy [ 236.262507] livepatch: kernel.ftrace_enabled = 1 [ 236.265215] % modprobe test_klp_livepatch [ 236.266486] livepatch: enabling patch 'test_klp_livepatch' [ 236.266488] livepatch: 'test_klp_livepatch': initializing patching transition [ 236.267596] livepatch: 'test_klp_livepatch': starting patching transition [ 237.791212] livepatch: 'test_klp_livepatch': completing patching transition [ 237.791310] livepatch: 'test_klp_livepatch': patching complete [ 237.797154] livepatch: sysctl: setting key "kernel.ftrace_enabled": Device or resource busy [ 237.798043] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 237.798095] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 237.798109] livepatch: 'test_klp_livepatch': starting unpatching transition [ 238.831322] livepatch: 'test_klp_livepatch': completing unpatching transition [ 238.832826] livepatch: 'test_klp_livepatch': unpatching complete [ 238.908640] % rmmod test_klp_livepatch [ 238.992263] livepatch: kernel.ftrace_enabled = 1 [ 238.999933] ===== TEST: sysfs test ===== [ 239.002807] % modprobe test_klp_livepatch [ 239.004110] livepatch: enabling patch 'test_klp_livepatch' [ 239.004111] livepatch: 'test_klp_livepatch': initializing patching transition [ 239.005181] livepatch: 'test_klp_livepatch': starting patching transition [ 240.111262] livepatch: 'test_klp_livepatch': completing patching transition [ 240.111381] livepatch: 'test_klp_livepatch': patching complete [ 240.132783] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 240.132799] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 240.132815] livepatch: 'test_klp_livepatch': starting unpatching transition [ 241.081328] livepatch: 'test_klp_livepatch': completing unpatching transition [ 241.082831] livepatch: 'test_klp_livepatch': unpatching complete [ 241.142598] % rmmod test_klp_livepatch [ 241.210158] ===== TEST: sysfs test object/patched ===== [ 241.213283] % modprobe test_klp_callbacks_demo [ 241.214762] livepatch: enabling patch 'test_klp_callbacks_demo' [ 241.214764] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 241.214784] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 241.214785] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 242.031320] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 242.031449] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 242.031451] livepatch: 'test_klp_callbacks_demo': patching complete [ 242.136182] % modprobe test_klp_callbacks_mod [ 242.137515] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 242.137517] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 242.137519] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 242.137535] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 242.139783] % rmmod test_klp_callbacks_mod [ 242.140942] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 242.140957] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 242.140959] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 242.140960] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 242.231991] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 242.232011] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 242.232030] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 242.232032] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 243.071322] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 243.071422] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 243.071424] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 243.141124] % rmmod test_klp_callbacks_demo [ 243.282256] livepatch: kernel.ftrace_enabled = 1 [ 243.290569] ===== TEST: basic function patching ===== [ 243.293596] % modprobe test_klp_livepatch [ 243.295013] livepatch: enabling patch 'test_klp_livepatch' [ 243.295016] livepatch: 'test_klp_livepatch': initializing patching transition [ 243.296162] livepatch: 'test_klp_livepatch': starting patching transition [ 244.911383] livepatch: 'test_klp_livepatch': completing patching transition [ 244.911489] livepatch: 'test_klp_livepatch': patching complete [ 244.924091] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 244.924112] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 244.924134] livepatch: 'test_klp_livepatch': starting unpatching transition [ 245.871319] livepatch: 'test_klp_livepatch': completing unpatching transition [ 245.872799] livepatch: 'test_klp_livepatch': unpatching complete [ 245.934000] % rmmod test_klp_livepatch [ 246.029530] ===== TEST: multiple livepatches ===== [ 246.032436] % modprobe test_klp_livepatch [ 246.033861] livepatch: enabling patch 'test_klp_livepatch' [ 246.033863] livepatch: 'test_klp_livepatch': initializing patching transition [ 246.034968] livepatch: 'test_klp_livepatch': starting patching transition [ 247.711339] livepatch: 'test_klp_livepatch': completing patching transition [ 247.711489] livepatch: 'test_klp_livepatch': patching complete [ 247.763427] test_klp_livepatch: this has been live patched [ 247.767396] % modprobe test_klp_atomic_replace replace=0 [ 247.768853] livepatch: enabling patch 'test_klp_atomic_replace' [ 247.768854] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 247.769960] livepatch: 'test_klp_atomic_replace': starting patching transition [ 248.751335] livepatch: 'test_klp_atomic_replace': completing patching transition [ 248.751471] livepatch: 'test_klp_atomic_replace': patching complete [ 248.788134] test_klp_livepatch: this has been live patched [ 248.789014] test_klp_atomic_replace: this has been live patched [ 248.789161] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 248.789181] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 248.789197] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 249.711272] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 249.712588] livepatch: 'test_klp_atomic_replace': unpatching complete [ 249.798070] % rmmod test_klp_atomic_replace [ 249.851728] test_klp_livepatch: this has been live patched [ 249.852707] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 249.852727] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 249.852745] livepatch: 'test_klp_livepatch': starting unpatching transition [ 250.751345] livepatch: 'test_klp_livepatch': completing unpatching transition [ 250.752836] livepatch: 'test_klp_livepatch': unpatching complete [ 250.761513] % rmmod test_klp_livepatch [ 250.851360] ===== TEST: atomic replace livepatch ===== [ 250.854431] % modprobe test_klp_livepatch [ 250.855791] livepatch: enabling patch 'test_klp_livepatch' [ 250.855793] livepatch: 'test_klp_livepatch': initializing patching transition [ 250.856996] livepatch: 'test_klp_livepatch': starting patching transition [ 251.711343] livepatch: 'test_klp_livepatch': completing patching transition [ 251.711461] livepatch: 'test_klp_livepatch': patching complete [ 251.773219] test_klp_livepatch: this has been live patched [ 251.777357] % modprobe test_klp_atomic_replace replace=1 [ 251.778873] livepatch: enabling patch 'test_klp_atomic_replace' [ 251.778875] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 251.780049] livepatch: 'test_klp_atomic_replace': starting patching transition [ 252.911301] livepatch: 'test_klp_atomic_replace': completing patching transition [ 252.912669] livepatch: 'test_klp_atomic_replace': patching complete [ 253.001881] test_klp_atomic_replace: this has been live patched [ 253.002864] % rmmod test_klp_livepatch [ 253.052447] test_klp_atomic_replace: this has been live patched [ 253.052561] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 253.052580] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 253.052597] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 253.871341] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 253.872934] livepatch: 'test_klp_atomic_replace': unpatching complete [ 253.961071] % rmmod test_klp_atomic_replace [ 254.075347] livepatch: kernel.ftrace_enabled = 1 [ 254.083375] ===== TEST: target module before livepatch ===== [ 254.086470] % modprobe test_klp_callbacks_mod [ 254.087750] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 254.091112] % modprobe test_klp_callbacks_demo [ 254.092572] livepatch: enabling patch 'test_klp_callbacks_demo' [ 254.092574] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 254.092593] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 254.092594] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 254.092595] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 254.911372] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 254.911470] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 254.911472] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 254.911474] livepatch: 'test_klp_callbacks_demo': patching complete [ 255.008950] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 255.008969] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 255.009000] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 255.009002] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 255.009020] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 255.951355] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 255.951452] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 255.951454] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 255.951456] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 256.018607] % rmmod test_klp_callbacks_demo [ 256.091916] % rmmod test_klp_callbacks_mod [ 256.093014] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 256.169237] ===== TEST: module_coming notifier ===== [ 256.172297] % modprobe test_klp_callbacks_demo [ 256.173751] livepatch: enabling patch 'test_klp_callbacks_demo' [ 256.173753] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 256.173772] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 256.173774] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 257.871420] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 257.871550] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 257.871552] livepatch: 'test_klp_callbacks_demo': patching complete [ 257.906694] % modprobe test_klp_callbacks_mod [ 257.907956] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 257.907958] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 257.907959] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 257.907977] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 257.908350] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 257.908367] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 257.908387] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 257.908388] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 257.908390] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 258.911396] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 258.911552] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 258.911554] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 258.911556] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 258.918270] % rmmod test_klp_callbacks_demo [ 259.001970] % rmmod test_klp_callbacks_mod [ 259.002953] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 259.118512] ===== TEST: module_going notifier ===== [ 259.121469] % modprobe test_klp_callbacks_mod [ 259.122753] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 259.125852] % modprobe test_klp_callbacks_demo [ 259.127258] livepatch: enabling patch 'test_klp_callbacks_demo' [ 259.127259] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 259.127280] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 259.127281] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 259.127282] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 260.191345] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 260.191448] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 260.191449] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 260.191451] livepatch: 'test_klp_callbacks_demo': patching complete [ 260.248083] % rmmod test_klp_callbacks_mod [ 260.249312] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 260.249330] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 260.249332] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 260.249333] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 260.311104] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 260.311123] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 260.311150] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 260.311151] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 261.151436] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 261.151581] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 261.151583] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 261.220008] % rmmod test_klp_callbacks_demo [ 261.309304] ===== TEST: module_coming and module_going notifiers ===== [ 261.312251] % modprobe test_klp_callbacks_demo [ 261.313722] livepatch: enabling patch 'test_klp_callbacks_demo' [ 261.313724] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 261.313762] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 261.313763] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 262.671500] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 262.671624] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 262.671626] livepatch: 'test_klp_callbacks_demo': patching complete [ 262.742090] % modprobe test_klp_callbacks_mod [ 262.743321] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 262.743324] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 262.743326] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 262.743344] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 262.744479] % rmmod test_klp_callbacks_mod [ 262.745567] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 262.745582] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 262.745584] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 262.745585] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 262.811091] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 262.811109] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 262.811130] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 262.811131] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 263.951430] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 263.951537] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 263.951539] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 264.022343] % rmmod test_klp_callbacks_demo [ 264.179776] ===== TEST: target module not present ===== [ 264.182883] % modprobe test_klp_callbacks_demo [ 264.184345] livepatch: enabling patch 'test_klp_callbacks_demo' [ 264.184347] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 264.184367] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 264.184368] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 265.081369] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 265.081514] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 265.081516] livepatch: 'test_klp_callbacks_demo': patching complete [ 265.101043] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 265.101062] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 265.101083] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 265.101084] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 266.191411] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 266.191510] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 266.191512] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 266.211817] % rmmod test_klp_callbacks_demo [ 266.279575] ===== TEST: pre-patch callback -ENODEV ===== [ 266.282491] % modprobe test_klp_callbacks_mod [ 266.283760] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 266.284111] % modprobe test_klp_callbacks_demo pre_patch_ret=-19 [ 266.285525] livepatch: enabling patch 'test_klp_callbacks_demo' [ 266.285527] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 266.285548] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 266.285549] livepatch: pre-patch callback failed for object 'vmlinux' [ 266.285550] livepatch: failed to enable patch 'test_klp_callbacks_demo' [ 266.285551] livepatch: 'test_klp_callbacks_demo': canceling patching transition, going to unpatch [ 266.285552] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 266.285659] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 266.481071] modprobe: ERROR: could not insert 'test_klp_callbacks_demo': No such device [ 266.482054] % rmmod test_klp_callbacks_mod [ 266.483170] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 266.569358] ===== TEST: module_coming + pre-patch callback -ENODEV ===== [ 266.572523] % modprobe test_klp_callbacks_demo [ 266.573921] livepatch: enabling patch 'test_klp_callbacks_demo' [ 266.573924] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 266.573963] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 266.573965] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 268.031434] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 268.031535] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 268.031537] livepatch: 'test_klp_callbacks_demo': patching complete [ 268.100668] % echo -19 > /sys/module/test_klp_callbacks_demo/parameters/pre_patch_ret [ 268.101662] % modprobe test_klp_callbacks_mod [ 268.102985] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 268.102988] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 268.102990] livepatch: pre-patch callback failed for object 'test_klp_callbacks_mod' [ 268.102991] livepatch: patch 'test_klp_callbacks_demo' failed for module 'test_klp_callbacks_mod', refusing to load module 'test_klp_callbacks_mod' [ 268.231087] modprobe: ERROR: could not insert 'test_klp_callbacks_mod': No such device [ 268.231141] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 268.231156] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 268.231176] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 268.231177] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 269.951417] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 269.951520] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 269.951522] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 270.048128] % rmmod test_klp_callbacks_demo [ 270.110260] ===== TEST: multiple target modules ===== [ 270.113377] % modprobe test_klp_callbacks_busy block_transition=N [ 270.114847] test_klp_callbacks_busy: test_klp_callbacks_busy_init [ 270.114851] test_klp_callbacks_busy: busymod_work_func enter [ 270.114853] test_klp_callbacks_busy: busymod_work_func exit [ 270.118456] % modprobe test_klp_callbacks_demo [ 270.119920] livepatch: enabling patch 'test_klp_callbacks_demo' [ 270.119922] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 270.119941] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 270.119943] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 270.121350] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 271.871484] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 271.871585] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 271.871587] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 271.871589] livepatch: 'test_klp_callbacks_demo': patching complete [ 271.957226] % modprobe test_klp_callbacks_mod [ 271.958646] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 271.958665] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 271.958667] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 271.958683] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 271.960010] % rmmod test_klp_callbacks_mod [ 271.961127] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 271.961141] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 271.961143] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 271.961145] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 272.031267] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 272.031285] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 272.031303] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 272.031304] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 272.031306] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 272.831467] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 272.833230] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 272.833232] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 272.833233] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 272.839688] % rmmod test_klp_callbacks_demo [ 272.912113] % rmmod test_klp_callbacks_busy [ 272.913268] test_klp_callbacks_busy: test_klp_callbacks_busy_exit [ 272.989731] ===== TEST: busy target module ===== [ 272.992863] % modprobe test_klp_callbacks_busy block_transition=Y [ 272.994427] test_klp_callbacks_busy: test_klp_callbacks_busy_init [ 272.994433] test_klp_callbacks_busy: busymod_work_func enter [ 272.997897] % modprobe test_klp_callbacks_demo [ 272.999390] livepatch: enabling patch 'test_klp_callbacks_demo' [ 272.999391] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 272.999413] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 272.999415] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 273.000863] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 273.006166] % modprobe test_klp_callbacks_mod [ 273.007622] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 273.007624] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 273.007651] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 273.009014] % rmmod test_klp_callbacks_mod [ 273.010123] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 273.010139] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 273.010141] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 273.091251] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 273.091269] livepatch: 'test_klp_callbacks_demo': reversing transition from patching to unpatching [ 273.091425] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 275.791451] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 275.793206] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 275.793209] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 275.793210] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 275.815309] % rmmod test_klp_callbacks_demo [ 275.882051] % rmmod test_klp_callbacks_busy [ 275.890764] test_klp_callbacks_busy: busymod_work_func exit [ 275.890773] test_klp_callbacks_busy: test_klp_callbacks_busy_exit [ 275.959816] ===== TEST: multiple livepatches ===== [ 275.963029] % modprobe test_klp_callbacks_demo [ 275.964604] livepatch: enabling patch 'test_klp_callbacks_demo' [ 275.964606] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 275.964628] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 275.964629] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 277.641504] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 277.641611] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 277.641613] livepatch: 'test_klp_callbacks_demo': patching complete [ 277.698468] % modprobe test_klp_callbacks_demo2 [ 277.700098] livepatch: enabling patch 'test_klp_callbacks_demo2' [ 277.700100] livepatch: 'test_klp_callbacks_demo2': initializing patching transition [ 277.700119] test_klp_callbacks_demo2: pre_patch_callback: vmlinux [ 277.700120] livepatch: 'test_klp_callbacks_demo2': starting patching transition [ 278.681475] livepatch: 'test_klp_callbacks_demo2': completing patching transition [ 278.681615] test_klp_callbacks_demo2: post_patch_callback: vmlinux [ 278.681617] livepatch: 'test_klp_callbacks_demo2': patching complete [ 278.719462] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled [ 278.719482] livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition [ 278.719504] test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux [ 278.719505] livepatch: 'test_klp_callbacks_demo2': starting unpatching transition [ 279.791389] livepatch: 'test_klp_callbacks_demo2': completing unpatching transition [ 279.791487] test_klp_callbacks_demo2: post_unpatch_callback: vmlinux [ 279.791489] livepatch: 'test_klp_callbacks_demo2': unpatching complete [ 279.829592] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 279.829612] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 279.829629] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 279.829630] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 280.831497] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 280.831602] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 280.831604] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 280.839540] % rmmod test_klp_callbacks_demo2 [ 280.912127] % rmmod test_klp_callbacks_demo [ 280.989065] ===== TEST: atomic replace ===== [ 280.991951] % modprobe test_klp_callbacks_demo [ 280.993414] livepatch: enabling patch 'test_klp_callbacks_demo' [ 280.993416] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 280.993436] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 280.993437] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 281.871479] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 281.871579] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 281.871581] livepatch: 'test_klp_callbacks_demo': patching complete [ 281.912919] % modprobe test_klp_callbacks_demo2 replace=1 [ 281.914353] livepatch: enabling patch 'test_klp_callbacks_demo2' [ 281.914356] livepatch: 'test_klp_callbacks_demo2': initializing patching transition [ 281.914376] test_klp_callbacks_demo2: pre_patch_callback: vmlinux [ 281.914377] livepatch: 'test_klp_callbacks_demo2': starting patching transition [ 283.071478] livepatch: 'test_klp_callbacks_demo2': completing patching transition [ 283.071583] test_klp_callbacks_demo2: post_patch_callback: vmlinux [ 283.071585] livepatch: 'test_klp_callbacks_demo2': patching complete [ 283.135341] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled [ 283.135361] livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition [ 283.135381] test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux [ 283.135382] livepatch: 'test_klp_callbacks_demo2': starting unpatching transition [ 284.031462] livepatch: 'test_klp_callbacks_demo2': completing unpatching transition [ 284.031579] test_klp_callbacks_demo2: post_unpatch_callback: vmlinux [ 284.031580] livepatch: 'test_klp_callbacks_demo2': unpatching complete [ 284.044328] % rmmod test_klp_callbacks_demo2 [ 284.112113] % rmmod test_klp_callbacks_demo [ 284.224335] livepatch: kernel.ftrace_enabled = 1
[ 100.031067] livepatch: 'test_klp_state2': completing patching transition [ 100.031184] test_klp_state2: post_patch_callback: vmlinux [ 100.031185] test_klp_state2: fix_console_loglevel: fixing console_loglevel [ 100.031187] livepatch: 'test_klp_state2': patching complete [ 100.045573] % modprobe test_klp_state3 [ 100.047069] livepatch: enabling patch 'test_klp_state3' [ 100.047072] livepatch: 'test_klp_state3': initializing patching transition [ 100.047093] test_klp_state3: pre_patch_callback: vmlinux [ 100.047094] test_klp_state3: allocate_loglevel_state: space to store console_loglevel already allocated [ 100.047095] livepatch: 'test_klp_state3': starting patching transition [ 101.711037] livepatch: 'test_klp_state3': completing patching transition [ 101.711204] test_klp_state3: post_patch_callback: vmlinux [ 101.711206] test_klp_state3: fix_console_loglevel: taking over the console_loglevel change [ 101.711207] livepatch: 'test_klp_state3': patching complete [ 101.778205] % rmmod test_klp_state2 [ 101.853923] % modprobe test_klp_state2 [ 101.855447] livepatch: enabling patch 'test_klp_state2' [ 101.855449] livepatch: 'test_klp_state2': initializing patching transition [ 101.855470] test_klp_state2: pre_patch_callback: vmlinux [ 101.855472] test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated [ 101.855473] livepatch: 'test_klp_state2': starting patching transition [ 103.630965] livepatch: 'test_klp_state2': completing patching transition [ 103.631070] test_klp_state2: post_patch_callback: vmlinux [ 103.631071] test_klp_state2: fix_console_loglevel: taking over the console_loglevel change [ 103.631073] livepatch: 'test_klp_state2': patching complete [ 103.686892] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 103.686911] livepatch: 'test_klp_state2': initializing unpatching transition [ 103.686932] test_klp_state2: pre_unpatch_callback: vmlinux [ 103.686933] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 103.686935] livepatch: 'test_klp_state2': starting unpatching transition [ 105.150996] livepatch: 'test_klp_state2': completing unpatching transition [ 105.151097] test_klp_state2: post_unpatch_callback: vmlinux [ 105.151099] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 105.151100] livepatch: 'test_klp_state2': unpatching complete [ 105.199966] % rmmod test_klp_state2 [ 105.281410] % rmmod test_klp_state3 [ 105.355459] ===== TEST: incompatible cumulative livepatches ===== [ 105.358650] % modprobe test_klp_state2 [ 105.360034] livepatch: enabling patch 'test_klp_state2' [ 105.360035] livepatch: 'test_klp_state2': initializing patching transition [ 105.360056] test_klp_state2: pre_patch_callback: vmlinux [ 105.360057] test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel [ 105.360058] livepatch: 'test_klp_state2': starting patching transition [ 107.071045] livepatch: 'test_klp_state2': completing patching transition [ 107.071145] test_klp_state2: post_patch_callback: vmlinux [ 107.071147] test_klp_state2: fix_console_loglevel: fixing console_loglevel [ 107.071148] livepatch: 'test_klp_state2': patching complete [ 107.087110] % modprobe test_klp_state [ 107.088695] livepatch: Livepatch patch (test_klp_state) is not compatible with the already installed livepatches. [ 107.190677] modprobe: ERROR: could not insert 'test_klp_state': Invalid argument [ 107.190716] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 107.190734] livepatch: 'test_klp_state2': initializing unpatching transition [ 107.190753] test_klp_state2: pre_unpatch_callback: vmlinux [ 107.190754] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 107.190755] livepatch: 'test_klp_state2': starting unpatching transition [ 108.111015] livepatch: 'test_klp_state2': completing unpatching transition [ 108.111118] test_klp_state2: post_unpatch_callback: vmlinux [ 108.111120] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 108.111121] livepatch: 'test_klp_state2': unpatching complete [ 108.200035] % rmmod test_klp_state2 [ 108.301787] livepatch: kernel.ftrace_enabled = 1 [ 108.308056] ===== TEST: livepatch interaction with ftrace_enabled sysctl ===== [ 108.309828] livepatch: kernel.ftrace_enabled = 0 [ 108.309890] % modprobe test_klp_livepatch [ 108.311242] livepatch: enabling patch 'test_klp_livepatch' [ 108.311244] livepatch: 'test_klp_livepatch': initializing patching transition [ 108.311267] livepatch: failed to register ftrace handler for function 'cmdline_proc_show' (-16) [ 108.311270] livepatch: failed to patch object 'vmlinux' [ 108.311271] livepatch: failed to enable patch 'test_klp_livepatch' [ 108.311272] livepatch: 'test_klp_livepatch': canceling patching transition, going to unpatch [ 108.311273] livepatch: 'test_klp_livepatch': completing unpatching transition [ 108.311382] livepatch: 'test_klp_livepatch': unpatching complete [ 108.500681] modprobe: ERROR: could not insert 'test_klp_livepatch': Device or resource busy [ 108.502529] livepatch: kernel.ftrace_enabled = 1 [ 108.505528] % modprobe test_klp_livepatch [ 108.506881] livepatch: enabling patch 'test_klp_livepatch' [ 108.506882] livepatch: 'test_klp_livepatch': initializing patching transition [ 108.508030] livepatch: 'test_klp_livepatch': starting patching transition [ 109.790992] livepatch: 'test_klp_livepatch': completing patching transition [ 109.791146] livepatch: 'test_klp_livepatch': patching complete [ 109.834645] livepatch: sysctl: setting key "kernel.ftrace_enabled": Device or resource busy [ 109.835658] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 109.835676] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 109.835692] livepatch: 'test_klp_livepatch': starting unpatching transition [ 110.831016] livepatch: 'test_klp_livepatch': completing unpatching transition [ 110.832521] livepatch: 'test_klp_livepatch': unpatching complete [ 110.845082] % rmmod test_klp_livepatch [ 110.962324] livepatch: kernel.ftrace_enabled = 1 [ 110.969070] ===== TEST: sysfs test ===== [ 110.972147] % modprobe test_klp_livepatch [ 110.973575] livepatch: enabling patch 'test_klp_livepatch' [ 110.973578] livepatch: 'test_klp_livepatch': initializing patching transition [ 110.974676] livepatch: 'test_klp_livepatch': starting patching transition [ 112.671034] livepatch: 'test_klp_livepatch': completing patching transition [ 112.671137] livepatch: 'test_klp_livepatch': patching complete [ 112.711815] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 112.711832] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 112.711853] livepatch: 'test_klp_livepatch': starting unpatching transition [ 113.711046] livepatch: 'test_klp_livepatch': completing unpatching transition [ 113.712556] livepatch: 'test_klp_livepatch': unpatching complete [ 113.721666] % rmmod test_klp_livepatch [ 113.786348] ===== TEST: sysfs test object/patched ===== [ 113.789508] % modprobe test_klp_callbacks_demo [ 113.791059] livepatch: enabling patch 'test_klp_callbacks_demo' [ 113.791061] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 113.791082] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 113.791083] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 114.831046] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 114.831155] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 114.831157] livepatch: 'test_klp_callbacks_demo': patching complete [ 114.915700] % modprobe test_klp_callbacks_mod [ 114.917199] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 114.917201] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 114.917203] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 114.917220] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 114.919407] % rmmod test_klp_callbacks_mod [ 114.920563] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 114.920578] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 114.920580] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 114.920582] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 114.991648] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 114.991667] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 114.991690] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 114.991692] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 116.671055] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 116.671159] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 116.671177] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 116.706610] % rmmod test_klp_callbacks_demo [ 116.853345] livepatch: kernel.ftrace_enabled = 1 [ 116.860222] ===== TEST: basic function patching ===== [ 116.863329] % modprobe test_klp_livepatch [ 116.864936] livepatch: enabling patch 'test_klp_livepatch' [ 116.864938] livepatch: 'test_klp_livepatch': initializing patching transition [ 116.866224] livepatch: 'test_klp_livepatch': starting patching transition [ 117.791071] livepatch: 'test_klp_livepatch': completing patching transition [ 117.791193] livepatch: 'test_klp_livepatch': patching complete [ 117.885360] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 117.885397] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 117.885424] livepatch: 'test_klp_livepatch': starting unpatching transition [ 118.750980] livepatch: 'test_klp_livepatch': completing unpatching transition [ 118.752543] livepatch: 'test_klp_livepatch': unpatching complete [ 118.794530] % rmmod test_klp_livepatch [ 118.897157] ===== TEST: multiple livepatches ===== [ 118.900009] % modprobe test_klp_livepatch [ 118.901338] livepatch: enabling patch 'test_klp_livepatch' [ 118.901341] livepatch: 'test_klp_livepatch': initializing patching transition [ 118.902413] livepatch: 'test_klp_livepatch': starting patching transition [ 119.711012] livepatch: 'test_klp_livepatch': completing patching transition [ 119.711114] livepatch: 'test_klp_livepatch': patching complete [ 119.718796] test_klp_livepatch: this has been live patched [ 119.723001] % modprobe test_klp_atomic_replace replace=0 [ 119.724612] livepatch: enabling patch 'test_klp_atomic_replace' [ 119.724614] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 119.725833] livepatch: 'test_klp_atomic_replace': starting patching transition [ 120.751022] livepatch: 'test_klp_atomic_replace': completing patching transition [ 120.751130] livepatch: 'test_klp_atomic_replace': patching complete [ 120.847005] test_klp_livepatch: this has been live patched [ 120.847986] test_klp_atomic_replace: this has been live patched [ 120.848118] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 120.848138] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 120.848158] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 121.710988] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 121.712378] livepatch: 'test_klp_atomic_replace': unpatching complete [ 121.757104] % rmmod test_klp_atomic_replace [ 121.801514] test_klp_livepatch: this has been live patched [ 121.802520] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 121.802538] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 121.802554] livepatch: 'test_klp_livepatch': starting unpatching transition [ 122.761006] livepatch: 'test_klp_livepatch': completing unpatching transition [ 122.762405] livepatch: 'test_klp_livepatch': unpatching complete [ 122.812386] % rmmod test_klp_livepatch [ 122.888229] ===== TEST: atomic replace livepatch ===== [ 122.891365] % modprobe test_klp_livepatch [ 122.892757] livepatch: enabling patch 'test_klp_livepatch' [ 122.892759] livepatch: 'test_klp_livepatch': initializing patching transition [ 122.893900] livepatch: 'test_klp_livepatch': starting patching transition [ 123.871073] livepatch: 'test_klp_livepatch': completing patching transition [ 123.871179] livepatch: 'test_klp_livepatch': patching complete [ 123.913201] test_klp_livepatch: this has been live patched [ 123.917508] % modprobe test_klp_atomic_replace replace=1 [ 123.918994] livepatch: enabling patch 'test_klp_atomic_replace' [ 123.918996] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 123.920106] livepatch: 'test_klp_atomic_replace': starting patching transition [ 124.751016] livepatch: 'test_klp_atomic_replace': completing patching transition [ 124.752390] livepatch: 'test_klp_atomic_replace': patching complete [ 124.838483] test_klp_atomic_replace: this has been live patched [ 124.839576] % rmmod test_klp_livepatch [ 124.892319] test_klp_atomic_replace: this has been live patched [ 124.892494] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 124.892513] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 124.892529] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 125.711010] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 125.712510] livepatch: 'test_klp_atomic_replace': unpatching complete [ 125.801651] % rmmod test_klp_atomic_replace [ 125.905407] livepatch: kernel.ftrace_enabled = 1 [ 125.912644] ===== TEST: target module before livepatch ===== [ 125.915835] % modprobe test_klp_callbacks_mod [ 125.917236] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 125.920790] % modprobe test_klp_callbacks_demo [ 125.922345] livepatch: enabling patch 'test_klp_callbacks_demo' [ 125.922347] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 125.922366] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 125.922367] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 125.922369] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 127.711053] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 127.711189] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 127.711191] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 127.711193] livepatch: 'test_klp_callbacks_demo': patching complete [ 127.755072] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 127.755091] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 127.755106] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 127.755107] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 127.755109] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 128.671068] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 128.671171] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 128.671172] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 128.671174] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 128.765224] % rmmod test_klp_callbacks_demo [ 128.811614] % rmmod test_klp_callbacks_mod [ 128.812787] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 128.887174] ===== TEST: module_coming notifier ===== [ 128.890422] % modprobe test_klp_callbacks_demo [ 128.892042] livepatch: enabling patch 'test_klp_callbacks_demo' [ 128.892045] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 128.892067] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 128.892068] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 129.791064] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 129.791173] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 129.791175] livepatch: 'test_klp_callbacks_demo': patching complete [ 129.812482] % modprobe test_klp_callbacks_mod [ 129.813968] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 129.813971] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 129.813973] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 129.813990] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 129.814364] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 129.814383] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 129.814404] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 129.814405] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 129.814407] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 130.671041] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 130.671174] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 130.671176] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 130.671178] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 130.723905] % rmmod test_klp_callbacks_demo [ 130.771625] % rmmod test_klp_callbacks_mod [ 130.772641] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 130.826909] ===== TEST: module_going notifier ===== [ 130.830202] % modprobe test_klp_callbacks_mod [ 130.831538] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 130.834984] % modprobe test_klp_callbacks_demo [ 130.836549] livepatch: enabling patch 'test_klp_callbacks_demo' [ 130.836552] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 130.836573] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 130.836574] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 130.836576] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 131.710974] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 131.711075] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 131.711077] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 131.711079] livepatch: 'test_klp_callbacks_demo': patching complete [ 131.754244] % rmmod test_klp_callbacks_mod [ 131.755454] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 131.755471] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 131.755473] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 131.755475] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 131.800736] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 131.800754] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 131.800775] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 131.800776] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 133.071027] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 133.071132] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 133.071134] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 133.113297] % rmmod test_klp_callbacks_demo [ 133.177434] ===== TEST: module_coming and module_going notifiers ===== [ 133.180622] % modprobe test_klp_callbacks_demo [ 133.182228] livepatch: enabling patch 'test_klp_callbacks_demo' [ 133.182231] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 133.182251] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 133.182252] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 134.751073] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 134.751184] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 134.751187] livepatch: 'test_klp_callbacks_demo': patching complete [ 134.813811] % modprobe test_klp_callbacks_mod [ 134.815280] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 134.815282] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 134.815284] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 134.815302] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 134.816526] % rmmod test_klp_callbacks_mod [ 134.817758] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 134.817773] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 134.817775] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 134.817776] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 134.940787] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 134.940806] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 134.940828] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 134.940829] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 135.950967] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 135.951069] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 135.951071] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 136.051536] % rmmod test_klp_callbacks_demo [ 136.117597] ===== TEST: target module not present ===== [ 136.120836] % modprobe test_klp_callbacks_demo [ 136.122441] livepatch: enabling patch 'test_klp_callbacks_demo' [ 136.122444] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 136.122476] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 136.122477] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 137.871054] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 137.871179] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 137.871181] livepatch: 'test_klp_callbacks_demo': patching complete [ 137.952610] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 137.952631] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 137.952666] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 137.952668] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 139.071051] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 139.071152] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 139.071154] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 139.164250] % rmmod test_klp_callbacks_demo [ 139.257782] ===== TEST: pre-patch callback -ENODEV ===== [ 139.260610] % modprobe test_klp_callbacks_mod [ 139.261932] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 139.262266] % modprobe test_klp_callbacks_demo pre_patch_ret=-19 [ 139.263690] livepatch: enabling patch 'test_klp_callbacks_demo' [ 139.263692] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 139.263711] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 139.263712] livepatch: pre-patch callback failed for object 'vmlinux' [ 139.263713] livepatch: failed to enable patch 'test_klp_callbacks_demo' [ 139.263714] livepatch: 'test_klp_callbacks_demo': canceling patching transition, going to unpatch [ 139.263715] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 139.263820] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 139.410666] modprobe: ERROR: could not insert 'test_klp_callbacks_demo': No such device [ 139.411683] % rmmod test_klp_callbacks_mod [ 139.412838] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 139.477858] ===== TEST: module_coming + pre-patch callback -ENODEV ===== [ 139.480794] % modprobe test_klp_callbacks_demo [ 139.482279] livepatch: enabling patch 'test_klp_callbacks_demo' [ 139.482282] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 139.482303] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 139.482304] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 140.831122] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 140.831279] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 140.831281] livepatch: 'test_klp_callbacks_demo': patching complete [ 140.908032] % echo -19 > /sys/module/test_klp_callbacks_demo/parameters/pre_patch_ret [ 140.908963] % modprobe test_klp_callbacks_mod [ 140.910243] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 140.910246] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 140.910248] livepatch: pre-patch callback failed for object 'test_klp_callbacks_mod' [ 140.910249] livepatch: patch 'test_klp_callbacks_demo' failed for module 'test_klp_callbacks_mod', refusing to load module 'test_klp_callbacks_mod' [ 141.030671] modprobe: ERROR: could not insert 'test_klp_callbacks_mod': No such device [ 141.030722] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 141.030738] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 141.030776] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 141.030777] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 141.789613] crw_info : CRW reports slct=0, oflw=0, chn=0, rsc=B, anc=0, erc=0, rsid=0 [ 142.031077] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 142.031196] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 142.031198] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 142.041387] % rmmod test_klp_callbacks_demo [ 142.108391] ===== TEST: multiple target modules ===== [ 142.111495] % modprobe test_klp_callbacks_busy block_transition=N [ 142.112950] test_klp_callbacks_busy: test_klp_callbacks_busy_init [ 142.112954] test_klp_callbacks_busy: busymod_work_func enter [ 142.112956] test_klp_callbacks_busy: busymod_work_func exit [ 142.116379] % modprobe test_klp_callbacks_demo [ 142.117801] livepatch: enabling patch 'test_klp_callbacks_demo' [ 142.117802] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 142.117840] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 142.117841] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 142.119215] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 143.070935] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 143.071035] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 143.071037] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 143.071039] livepatch: 'test_klp_callbacks_demo': patching complete [ 143.141657] % modprobe test_klp_callbacks_mod [ 143.143195] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 143.143198] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 143.143200] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 143.143236] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 143.144563] % rmmod test_klp_callbacks_mod [ 143.145857] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 143.145873] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 143.145875] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 143.145876] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 143.220815] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 143.220851] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 143.220872] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 143.220873] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 143.220875] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 144.031007] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 144.032819] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 144.032821] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 144.032822] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 144.130433] % rmmod test_klp_callbacks_demo [ 144.211697] % rmmod test_klp_callbacks_busy [ 144.213003] test_klp_callbacks_busy: test_klp_callbacks_busy_exit [ 144.308603] ===== TEST: busy target module ===== [ 144.311786] % modprobe test_klp_callbacks_busy block_transition=Y [ 144.313186] test_klp_callbacks_busy: test_klp_callbacks_busy_init [ 144.313190] test_klp_callbacks_busy: busymod_work_func enter [ 144.316644] % modprobe test_klp_callbacks_demo [ 144.318094] livepatch: enabling patch 'test_klp_callbacks_demo' [ 144.318095] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 144.318115] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 144.318116] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 144.319516] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 144.324787] % modprobe test_klp_callbacks_mod [ 144.326157] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 144.326159] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 144.326174] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 144.327454] % rmmod test_klp_callbacks_mod [ 144.328546] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 144.328561] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 144.328563] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 144.410842] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 144.410861] livepatch: 'test_klp_callbacks_demo': reversing transition from patching to unpatching [ 144.410966] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 146.990932] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 146.992683] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 146.992685] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 146.992687] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 147.033638] % rmmod test_klp_callbacks_demo [ 147.121645] % rmmod test_klp_callbacks_busy [ 147.130314] test_klp_callbacks_busy: busymod_work_func exit [ 147.130323] test_klp_callbacks_busy: test_klp_callbacks_busy_exit [ 147.208177] ===== TEST: multiple livepatches ===== [ 147.211079] % modprobe test_klp_callbacks_demo [ 147.212707] livepatch: enabling patch 'test_klp_callbacks_demo' [ 147.212710] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 147.212730] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 147.212731] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 148.031059] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 148.031160] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 148.031162] livepatch: 'test_klp_callbacks_demo': patching complete [ 148.132098] % modprobe test_klp_callbacks_demo2 [ 148.133641] livepatch: enabling patch 'test_klp_callbacks_demo2' [ 148.133644] livepatch: 'test_klp_callbacks_demo2': initializing patching transition [ 148.133664] test_klp_callbacks_demo2: pre_patch_callback: vmlinux [ 148.133666] livepatch: 'test_klp_callbacks_demo2': starting patching transition [ 149.151067] livepatch: 'test_klp_callbacks_demo2': completing patching transition [ 149.151184] test_klp_callbacks_demo2: post_patch_callback: vmlinux [ 149.151186] livepatch: 'test_klp_callbacks_demo2': patching complete [ 149.152975] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled [ 149.152995] livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition [ 149.153015] test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux [ 149.153016] livepatch: 'test_klp_callbacks_demo2': starting unpatching transition [ 149.951022] livepatch: 'test_klp_callbacks_demo2': completing unpatching transition [ 149.951125] test_klp_callbacks_demo2: post_unpatch_callback: vmlinux [ 149.951127] livepatch: 'test_klp_callbacks_demo2': unpatching complete [ 149.960854] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 149.960873] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 149.960888] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 149.960890] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 150.991050] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 150.991152] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 150.991154] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 151.071631] % rmmod test_klp_callbacks_demo2 [ 151.131726] % rmmod test_klp_callbacks_demo [ 151.229250] ===== TEST: atomic replace ===== [ 151.232455] % modprobe test_klp_callbacks_demo [ 151.234085] livepatch: enabling patch 'test_klp_callbacks_demo' [ 151.234087] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 151.234107] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 151.234108] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 152.031077] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 152.031231] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 152.031233] livepatch: 'test_klp_callbacks_demo': patching complete [ 152.052914] % modprobe test_klp_callbacks_demo2 replace=1 [ 152.054593] livepatch: enabling patch 'test_klp_callbacks_demo2' [ 152.054595] livepatch: 'test_klp_callbacks_demo2': initializing patching transition [ 152.054616] test_klp_callbacks_demo2: pre_patch_callback: vmlinux [ 152.054618] livepatch: 'test_klp_callbacks_demo2': starting patching transition [ 153.071103] livepatch: 'test_klp_callbacks_demo2': completing patching transition [ 153.071224] test_klp_callbacks_demo2: post_patch_callback: vmlinux [ 153.071226] livepatch: 'test_klp_callbacks_demo2': patching complete [ 153.073798] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled [ 153.073819] livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition [ 153.073840] test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux [ 153.073841] livepatch: 'test_klp_callbacks_demo2': starting unpatching transition [ 154.031008] livepatch: 'test_klp_callbacks_demo2': completing unpatching transition [ 154.031113] test_klp_callbacks_demo2: post_unpatch_callback: vmlinux [ 154.031116] livepatch: 'test_klp_callbacks_demo2': unpatching complete [ 154.084458] % rmmod test_klp_callbacks_demo2 [ 154.161744] % rmmod test_klp_callbacks_demo [ 154.245192] livepatch: kernel.ftrace_enabled = 1 [ 154.253557] ===== TEST: basic shadow variable API ===== [ 154.256693] % modprobe test_klp_shadow_vars [ 154.258215] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 [ 154.258218] test_klp_shadow_vars: got expected NULL result [ 154.258220] test_klp_shadow_vars: shadow_ctor: PTR3 -> PTR2 [ 154.258221] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 [ 154.258224] test_klp_shadow_vars: shadow_ctor: PTR6 -> PTR5 [ 154.258226] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR1, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR5 = PTR6 [ 154.258228] test_klp_shadow_vars: shadow_ctor: PTR8 -> PTR7 [ 154.258229] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 [ 154.258232] test_klp_shadow_vars: shadow_ctor: PTR11 -> PTR10 [ 154.258233] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR10 = PTR11 [ 154.258235] test_klp_shadow_vars: shadow_ctor: PTR13 -> PTR12 [ 154.258236] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 [ 154.258239] test_klp_shadow_vars: shadow_ctor: PTR16 -> PTR15 [ 154.258240] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR14, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR15 = PTR16 [ 154.258242] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR3 [ 154.258243] test_klp_shadow_vars: got expected PTR3 -> PTR2 result [ 154.258244] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 [ 154.258246] test_klp_shadow_vars: got expected PTR6 -> PTR5 result [ 154.258268] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR8 [ 154.258269] test_klp_shadow_vars: got expected PTR8 -> PTR7 result [ 154.258270] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 [ 154.258271] test_klp_shadow_vars: got expected PTR11 -> PTR10 result [ 154.258273] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR13 [ 154.258274] test_klp_shadow_vars: got expected PTR13 -> PTR12 result [ 154.258275] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 [ 154.258276] test_klp_shadow_vars: got expected PTR16 -> PTR15 result [ 154.258278] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 [ 154.258280] test_klp_shadow_vars: got expected PTR3 -> PTR2 result [ 154.258281] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 [ 154.258283] test_klp_shadow_vars: got expected PTR8 -> PTR7 result [ 154.258284] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 [ 154.258286] test_klp_shadow_vars: got expected PTR13 -> PTR12 result [ 154.258287] test_klp_shadow_vars: shadow_dtor(obj=PTR1, shadow_data=PTR3) [ 154.258289] test_klp_shadow_vars: klp_shadow_free(obj=PTR1, id=0x1234, dtor=PTR17) [ 154.258290] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 [ 154.258292] test_klp_shadow_vars: got expected NULL result [ 154.258292] test_klp_shadow_vars: shadow_dtor(obj=PTR9, shadow_data=PTR8) [ 154.258294] test_klp_shadow_vars: klp_shadow_free(obj=PTR9, id=0x1234, dtor=PTR17) [ 154.258295] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR0 [ 154.258297] test_klp_shadow_vars: got expected NULL result [ 154.258297] test_klp_shadow_vars: shadow_dtor(obj=PTR14, shadow_data=PTR13) [ 154.258299] test_klp_shadow_vars: klp_shadow_free(obj=PTR14, id=0x1234, dtor=PTR17) [ 154.258300] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR0 [ 154.258301] test_klp_shadow_vars: got expected NULL result [ 154.258302] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 [ 154.258303] test_klp_shadow_vars: got expected PTR6 -> PTR5 result [ 154.258304] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 [ 154.258306] test_klp_shadow_vars: got expected PTR11 -> PTR10 result [ 154.258307] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 [ 154.258308] test_klp_shadow_vars: got expected PTR16 -> PTR15 result [ 154.258317] test_klp_shadow_vars: klp_shadow_free_all(id=0x1235, dtor=PTR0) [ 154.258318] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR0 [ 154.258319] test_klp_shadow_vars: got expected NULL result [ 154.258320] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR0 [ 154.258321] test_klp_shadow_vars: got expected NULL result [ 154.258322] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR0 [ 154.258323] test_klp_shadow_vars: got expected NULL result [ 154.259549] % rmmod test_klp_shadow_vars [ 154.364539] livepatch: kernel.ftrace_enabled = 1 [ 154.373051] ===== TEST: system state modification ===== [ 154.376288] % modprobe test_klp_state [ 154.377808] livepatch: enabling patch 'test_klp_state' [ 154.377810] livepatch: 'test_klp_state': initializing patching transition [ 154.377832] test_klp_state: pre_patch_callback: vmlinux [ 154.377833] test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel [ 154.377834] livepatch: 'test_klp_state': starting patching transition [ 155.951098] livepatch: 'test_klp_state': completing patching transition [ 155.951196] test_klp_state: post_patch_callback: vmlinux [ 155.951198] test_klp_state: fix_console_loglevel: fixing console_loglevel [ 155.951199] livepatch: 'test_klp_state': patching complete [ 156.005967] % echo 0 > /sys/kernel/livepatch/test_klp_state/enabled [ 156.005986] livepatch: 'test_klp_state': initializing unpatching transition [ 156.006003] test_klp_state: pre_unpatch_callback: vmlinux [ 156.006004] test_klp_state: restore_console_loglevel: restoring console_loglevel [ 156.006005] livepatch: 'test_klp_state': starting unpatching transition [ 156.991099] livepatch: 'test_klp_state': completing unpatching transition [ 156.991197] test_klp_state: post_unpatch_callback: vmlinux [ 156.991199] test_klp_state: free_loglevel_state: freeing space for the stored console_loglevel [ 156.991201] livepatch: 'test_klp_state': unpatching complete [ 157.016096] % rmmod test_klp_state [ 157.119439] ===== TEST: taking over system state modification ===== [ 157.122658] % modprobe test_klp_state [ 157.124299] livepatch: enabling patch 'test_klp_state' [ 157.124302] livepatch: 'test_klp_state': initializing patching transition [ 157.124324] test_klp_state: pre_patch_callback: vmlinux [ 157.124325] test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel [ 157.124326] livepatch: 'test_klp_state': starting patching transition [ 158.031004] livepatch: 'test_klp_state': completing patching transition [ 158.031105] test_klp_state: post_patch_callback: vmlinux [ 158.031107] test_klp_state: fix_console_loglevel: fixing console_loglevel [ 158.031109] livepatch: 'test_klp_state': patching complete [ 158.044647] % modprobe test_klp_state2 [ 158.046174] livepatch: enabling patch 'test_klp_state2' [ 158.046176] livepatch: 'test_klp_state2': initializing patching transition [ 158.046194] test_klp_state2: pre_patch_callback: vmlinux [ 158.046195] test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated [ 158.046197] livepatch: 'test_klp_state2': starting patching transition [ 158.991060] livepatch: 'test_klp_state2': completing patching transition [ 158.991184] test_klp_state2: post_patch_callback: vmlinux [ 158.991185] test_klp_state2: fix_console_loglevel: taking over the console_loglevel change [ 158.991186] livepatch: 'test_klp_state2': patching complete [ 159.065518] % rmmod test_klp_state [ 159.130779] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 159.130797] livepatch: 'test_klp_state2': initializing unpatching transition [ 159.130818] test_klp_state2: pre_unpatch_callback: vmlinux [ 159.130819] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 159.130820] livepatch: 'test_klp_state2': starting unpatching transition [ 160.911085] livepatch: 'test_klp_state2': completing unpatching transition [ 160.911224] test_klp_state2: post_unpatch_callback: vmlinux [ 160.911226] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 160.911227] livepatch: 'test_klp_state2': unpatching complete [ 160.948036] % rmmod test_klp_state2 [ 161.059424] ===== TEST: compatible cumulative livepatches ===== [ 161.062474] % modprobe test_klp_state2 [ 161.063931] livepatch: enabling patch 'test_klp_state2' [ 161.063934] livepatch: 'test_klp_state2': initializing patching transition [ 161.063957] test_klp_state2: pre_patch_callback: vmlinux [ 161.063958] test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel [ 161.063959] livepatch: 'test_klp_state2': starting patching transition [ 162.671079] livepatch: 'test_klp_state2': completing patching transition [ 162.671184] test_klp_state2: post_patch_callback: vmlinux [ 162.671186] test_klp_state2: fix_console_loglevel: fixing console_loglevel [ 162.671188] livepatch: 'test_klp_state2': patching complete [ 162.694355] % modprobe test_klp_state3 [ 162.695852] livepatch: enabling patch 'test_klp_state3' [ 162.695855] livepatch: 'test_klp_state3': initializing patching transition [ 162.695877] test_klp_state3: pre_patch_callback: vmlinux [ 162.695878] test_klp_state3: allocate_loglevel_state: space to store console_loglevel already allocated [ 162.695879] livepatch: 'test_klp_state3': starting patching transition [ 163.951036] livepatch: 'test_klp_state3': completing patching transition [ 163.951139] test_klp_state3: post_patch_callback: vmlinux [ 163.951141] test_klp_state3: fix_console_loglevel: taking over the console_loglevel change [ 163.951142] livepatch: 'test_klp_state3': patching complete [ 164.019372] % rmmod test_klp_state2 [ 164.093821] % modprobe test_klp_state2 [ 164.095460] livepatch: enabling patch 'test_klp_state2' [ 164.095463] livepatch: 'test_klp_state2': initializing patching transition [ 164.095484] test_klp_state2: pre_patch_callback: vmlinux [ 164.095485] test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated [ 164.095487] livepatch: 'test_klp_state2': starting patching transition [ 165.871122] livepatch: 'test_klp_state2': completing patching transition [ 165.871280] test_klp_state2: post_patch_callback: vmlinux [ 165.871281] test_klp_state2: fix_console_loglevel: taking over the console_loglevel change [ 165.871283] livepatch: 'test_klp_state2': patching complete [ 165.926447] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 165.926486] livepatch: 'test_klp_state2': initializing unpatching transition [ 165.926507] test_klp_state2: pre_unpatch_callback: vmlinux [ 165.926508] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 165.926509] livepatch: 'test_klp_state2': starting unpatching transition [ 166.831076] livepatch: 'test_klp_state2': completing unpatching transition [ 166.831199] test_klp_state2: post_unpatch_callback: vmlinux [ 166.831201] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 166.831203] livepatch: 'test_klp_state2': unpatching complete [ 166.835243] % rmmod test_klp_state2 [ 166.901777] % rmmod test_klp_state3 [ 166.969742] ===== TEST: incompatible cumulative livepatches ===== [ 166.972899] % modprobe test_klp_state2 [ 166.974399] livepatch: enabling patch 'test_klp_state2' [ 166.974401] livepatch: 'test_klp_state2': initializing patching transition [ 166.974420] test_klp_state2: pre_patch_callback: vmlinux [ 166.974422] test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel [ 166.974423] livepatch: 'test_klp_state2': starting patching transition [ 168.681063] livepatch: 'test_klp_state2': completing patching transition [ 168.681165] test_klp_state2: post_patch_callback: vmlinux [ 168.681167] test_klp_state2: fix_console_loglevel: fixing console_loglevel [ 168.681169] livepatch: 'test_klp_state2': patching complete [ 168.703685] % modprobe test_klp_state [ 168.705124] livepatch: Livepatch patch (test_klp_state) is not compatible with the already installed livepatches. [ 168.860784] modprobe: ERROR: could not insert 'test_klp_state': Invalid argument [ 168.860833] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 168.860851] livepatch: 'test_klp_state2': initializing unpatching transition [ 168.860909] test_klp_state2: pre_unpatch_callback: vmlinux [ 168.860910] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 168.860911] livepatch: 'test_klp_state2': starting unpatching transition [ 169.871047] livepatch: 'test_klp_state2': completing unpatching transition [ 169.871186] test_klp_state2: post_unpatch_callback: vmlinux [ 169.871188] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 169.871189] livepatch: 'test_klp_state2': unpatching complete [ 169.971989] % rmmod test_klp_state2 [ 170.114423] livepatch: kernel.ftrace_enabled = 1 [ 170.122713] ===== TEST: livepatch interaction with ftrace_enabled sysctl ===== [ 170.124491] livepatch: kernel.ftrace_enabled = 0 [ 170.124552] % modprobe test_klp_livepatch [ 170.125916] livepatch: enabling patch 'test_klp_livepatch' [ 170.125918] livepatch: 'test_klp_livepatch': initializing patching transition [ 170.125942] livepatch: failed to register ftrace handler for function 'cmdline_proc_show' (-16) [ 170.125945] livepatch: failed to patch object 'vmlinux' [ 170.125946] livepatch: failed to enable patch 'test_klp_livepatch' [ 170.125947] livepatch: 'test_klp_livepatch': canceling patching transition, going to unpatch [ 170.125948] livepatch: 'test_klp_livepatch': completing unpatching transition [ 170.126056] livepatch: 'test_klp_livepatch': unpatching complete [ 170.260823] modprobe: ERROR: could not insert 'test_klp_livepatch': Device or resource busy [ 170.262584] livepatch: kernel.ftrace_enabled = 1 [ 170.265470] % modprobe test_klp_livepatch [ 170.266711] livepatch: enabling patch 'test_klp_livepatch' [ 170.266712] livepatch: 'test_klp_livepatch': initializing patching transition [ 170.267782] livepatch: 'test_klp_livepatch': starting patching transition [ 171.791076] livepatch: 'test_klp_livepatch': completing patching transition [ 171.791226] livepatch: 'test_klp_livepatch': patching complete [ 171.797053] livepatch: sysctl: setting key "kernel.ftrace_enabled": Device or resource busy [ 171.798001] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 171.798020] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 171.798035] livepatch: 'test_klp_livepatch': starting unpatching transition [ 172.831042] livepatch: 'test_klp_livepatch': completing unpatching transition [ 172.832563] livepatch: 'test_klp_livepatch': unpatching complete [ 172.908336] % rmmod test_klp_livepatch [ 172.983414] livepatch: kernel.ftrace_enabled = 1 [ 172.991780] ===== TEST: sysfs test ===== [ 172.994796] % modprobe test_klp_livepatch [ 172.996248] livepatch: enabling patch 'test_klp_livepatch' [ 172.996250] livepatch: 'test_klp_livepatch': initializing patching transition [ 172.997482] livepatch: 'test_klp_livepatch': starting patching transition [ 174.671056] livepatch: 'test_klp_livepatch': completing patching transition [ 174.671194] livepatch: 'test_klp_livepatch': patching complete [ 174.734417] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 174.734432] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 174.734466] livepatch: 'test_klp_livepatch': starting unpatching transition [ 175.711081] livepatch: 'test_klp_livepatch': completing unpatching transition [ 175.712575] livepatch: 'test_klp_livepatch': unpatching complete [ 175.744085] % rmmod test_klp_livepatch [ 175.808160] ===== TEST: sysfs test object/patched ===== [ 175.810980] % modprobe test_klp_callbacks_demo [ 175.812208] livepatch: enabling patch 'test_klp_callbacks_demo' [ 175.812210] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 175.812230] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 175.812231] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 176.911051] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 176.911161] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 176.911163] livepatch: 'test_klp_callbacks_demo': patching complete [ 176.934731] % modprobe test_klp_callbacks_mod [ 176.935992] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 176.935994] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 176.935996] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 176.936013] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 176.937945] % rmmod test_klp_callbacks_mod [ 176.938946] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 176.938961] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 176.938963] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 176.938964] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 176.991789] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 176.991808] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 176.991828] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 176.991830] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 178.191025] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 178.191124] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 178.191126] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 178.202777] % rmmod test_klp_callbacks_demo [ 178.318263] livepatch: kernel.ftrace_enabled = 1 [ 178.326039] ===== TEST: basic function patching ===== [ 178.328835] % modprobe test_klp_livepatch [ 178.330156] livepatch: enabling patch 'test_klp_livepatch' [ 178.330158] livepatch: 'test_klp_livepatch': initializing patching transition [ 178.331256] livepatch: 'test_klp_livepatch': starting patching transition [ 179.711061] livepatch: 'test_klp_livepatch': completing patching transition [ 179.711168] livepatch: 'test_klp_livepatch': patching complete [ 179.757176] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 179.757196] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 179.757219] livepatch: 'test_klp_livepatch': starting unpatching transition [ 180.751089] livepatch: 'test_klp_livepatch': completing unpatching transition [ 180.752537] livepatch: 'test_klp_livepatch': unpatching complete [ 180.767212] % rmmod test_klp_livepatch [ 180.830459] ===== TEST: multiple livepatches ===== [ 180.833537] % modprobe test_klp_livepatch [ 180.834932] livepatch: enabling patch 'test_klp_livepatch' [ 180.834933] livepatch: 'test_klp_livepatch': initializing patching transition [ 180.836072] livepatch: 'test_klp_livepatch': starting patching transition [ 181.711030] livepatch: 'test_klp_livepatch': completing patching transition [ 181.711129] livepatch: 'test_klp_livepatch': patching complete [ 181.753931] test_klp_livepatch: this has been live patched [ 181.758075] % modprobe test_klp_atomic_replace replace=0 [ 181.759630] livepatch: enabling patch 'test_klp_atomic_replace' [ 181.759632] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 181.760761] livepatch: 'test_klp_atomic_replace': starting patching transition [ 182.751097] livepatch: 'test_klp_atomic_replace': completing patching transition [ 182.751210] livepatch: 'test_klp_atomic_replace': patching complete [ 182.779987] test_klp_livepatch: this has been live patched [ 182.780949] test_klp_atomic_replace: this has been live patched [ 182.781132] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 182.781152] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 182.781172] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 183.711178] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 183.712627] livepatch: 'test_klp_atomic_replace': unpatching complete [ 183.791173] % rmmod test_klp_atomic_replace [ 183.881579] test_klp_livepatch: this has been live patched [ 183.882598] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 183.882616] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 183.882634] livepatch: 'test_klp_livepatch': starting unpatching transition [ 184.751183] livepatch: 'test_klp_livepatch': completing unpatching transition [ 184.752715] livepatch: 'test_klp_livepatch': unpatching complete [ 184.791884] % rmmod test_klp_livepatch [ 184.921013] ===== TEST: atomic replace livepatch ===== [ 184.924117] % modprobe test_klp_livepatch [ 184.925507] livepatch: enabling patch 'test_klp_livepatch' [ 184.925509] livepatch: 'test_klp_livepatch': initializing patching transition [ 184.926666] livepatch: 'test_klp_livepatch': starting patching transition [ 185.791155] livepatch: 'test_klp_livepatch': completing patching transition [ 185.791263] livepatch: 'test_klp_livepatch': patching complete [ 185.844460] test_klp_livepatch: this has been live patched [ 185.848202] % modprobe test_klp_atomic_replace replace=1 [ 185.849784] livepatch: enabling patch 'test_klp_atomic_replace' [ 185.849786] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 185.850899] livepatch: 'test_klp_atomic_replace': starting patching transition [ 186.751268] livepatch: 'test_klp_atomic_replace': completing patching transition [ 186.752724] livepatch: 'test_klp_atomic_replace': patching complete [ 186.769820] test_klp_atomic_replace: this has been live patched [ 186.771001] % rmmod test_klp_livepatch [ 186.842577] test_klp_atomic_replace: this has been live patched [ 186.842713] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 186.842732] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 186.842752] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 187.711155] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 187.712686] livepatch: 'test_klp_atomic_replace': unpatching complete [ 187.751949] % rmmod test_klp_atomic_replace [ 187.875356] livepatch: kernel.ftrace_enabled = 1 [ 187.883440] ===== TEST: target module before livepatch ===== [ 187.886603] % modprobe test_klp_callbacks_mod [ 187.887986] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 187.891200] % modprobe test_klp_callbacks_demo [ 187.892630] livepatch: enabling patch 'test_klp_callbacks_demo' [ 187.892632] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 187.892658] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 187.892659] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 187.892660] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 189.071175] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 189.071347] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 189.071350] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 189.071351] livepatch: 'test_klp_callbacks_demo': patching complete [ 189.113416] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 189.113437] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 189.113459] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 189.113460] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 189.113461] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 190.831161] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 190.831300] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 190.831303] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 190.831304] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 190.928590] % rmmod test_klp_callbacks_demo [ 190.981743] % rmmod test_klp_callbacks_mod [ 190.982844] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 191.068717] ===== TEST: module_coming notifier ===== [ 191.071881] % modprobe test_klp_callbacks_demo [ 191.073324] livepatch: enabling patch 'test_klp_callbacks_demo' [ 191.073326] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 191.073345] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 191.073347] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 192.761063] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 192.761166] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 192.761168] livepatch: 'test_klp_callbacks_demo': patching complete [ 192.804600] % modprobe test_klp_callbacks_mod [ 192.806035] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 192.806038] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 192.806040] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 192.806058] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 192.806411] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 192.806429] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 192.806450] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 192.806452] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 192.806453] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 193.951153] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 193.951254] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 193.951256] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 193.951257] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 194.016717] % rmmod test_klp_callbacks_demo [ 194.111640] % rmmod test_klp_callbacks_mod [ 194.112834] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 194.179536] ===== TEST: module_going notifier ===== [ 194.182529] % modprobe test_klp_callbacks_mod [ 194.183902] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 194.186979] % modprobe test_klp_callbacks_demo [ 194.188306] livepatch: enabling patch 'test_klp_callbacks_demo' [ 194.188308] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 194.188334] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 194.188336] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 194.188337] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 195.871146] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 195.871247] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 195.871248] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 195.871250] livepatch: 'test_klp_callbacks_demo': patching complete [ 195.917690] % rmmod test_klp_callbacks_mod [ 195.918839] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 195.918874] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 195.918876] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 195.918877] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 196.000811] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 196.000829] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 196.000847] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 196.000848] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 196.831134] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 196.831258] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 196.831276] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 196.909237] % rmmod test_klp_callbacks_demo [ 196.999252] ===== TEST: module_coming and module_going notifiers ===== [ 197.002219] % modprobe test_klp_callbacks_demo [ 197.003720] livepatch: enabling patch 'test_klp_callbacks_demo' [ 197.003722] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 197.003761] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 197.003762] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 197.951097] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 197.951197] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 197.951199] livepatch: 'test_klp_callbacks_demo': patching complete [ 198.023498] % modprobe test_klp_callbacks_mod [ 198.024865] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 198.024868] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 198.024870] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 198.024887] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 198.026043] % rmmod test_klp_callbacks_mod [ 198.027153] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 198.027169] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 198.027171] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 198.027172] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 198.110789] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 198.110807] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 198.110828] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 198.110830] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 199.881138] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 199.881237] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 199.881239] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 199.925505] % rmmod test_klp_callbacks_demo [ 199.999151] ===== TEST: target module not present ===== [ 200.002145] % modprobe test_klp_callbacks_demo [ 200.003699] livepatch: enabling patch 'test_klp_callbacks_demo' [ 200.003701] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 200.003721] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 200.003723] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 200.911124] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 200.911242] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 200.911244] livepatch: 'test_klp_callbacks_demo': patching complete [ 200.919249] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 200.919267] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 200.919288] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 200.919289] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 201.951160] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 201.951277] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 201.951279] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 202.028867] % rmmod test_klp_callbacks_demo [ 202.119054] ===== TEST: pre-patch callback -ENODEV ===== [ 202.122040] % modprobe test_klp_callbacks_mod [ 202.123508] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 202.123862] % modprobe test_klp_callbacks_demo pre_patch_ret=-19 [ 202.125317] livepatch: enabling patch 'test_klp_callbacks_demo' [ 202.125319] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 202.125341] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 202.125342] livepatch: pre-patch callback failed for object 'vmlinux' [ 202.125343] livepatch: failed to enable patch 'test_klp_callbacks_demo' [ 202.125344] livepatch: 'test_klp_callbacks_demo': canceling patching transition, going to unpatch [ 202.125345] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 202.125496] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 202.250789] modprobe: ERROR: could not insert 'test_klp_callbacks_demo': No such device [ 202.251582] % rmmod test_klp_callbacks_mod [ 202.252724] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 202.348771] ===== TEST: module_coming + pre-patch callback -ENODEV ===== [ 202.351804] % modprobe test_klp_callbacks_demo [ 202.353355] livepatch: enabling patch 'test_klp_callbacks_demo' [ 202.353357] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 202.353392] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 202.353393] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 203.951197] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 203.951351] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 203.951353] livepatch: 'test_klp_callbacks_demo': patching complete [ 203.979670] % echo -19 > /sys/module/test_klp_callbacks_demo/parameters/pre_patch_ret [ 203.980548] % modprobe test_klp_callbacks_mod [ 203.981920] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 203.981922] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 203.981924] livepatch: pre-patch callback failed for object 'test_klp_callbacks_mod' [ 203.981925] livepatch: patch 'test_klp_callbacks_demo' failed for module 'test_klp_callbacks_mod', refusing to load module 'test_klp_callbacks_mod' [ 204.130800] modprobe: ERROR: could not insert 'test_klp_callbacks_mod': No such device [ 204.130845] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 204.130862] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 204.130882] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 204.130884] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 205.951235] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 205.951341] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 205.951343] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 206.046975] % rmmod test_klp_callbacks_demo [ 206.128457] ===== TEST: multiple target modules ===== [ 206.131336] % modprobe test_klp_callbacks_busy block_transition=N [ 206.132672] test_klp_callbacks_busy: test_klp_callbacks_busy_init [ 206.132677] test_klp_callbacks_busy: busymod_work_func enter [ 206.132679] test_klp_callbacks_busy: busymod_work_func exit [ 206.135860] % modprobe test_klp_callbacks_demo [ 206.137206] livepatch: enabling patch 'test_klp_callbacks_demo' [ 206.137207] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 206.137228] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 206.137229] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 206.138577] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 207.871214] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 207.871314] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 207.871316] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 207.871318] livepatch: 'test_klp_callbacks_demo': patching complete [ 207.969934] % modprobe test_klp_callbacks_mod [ 207.971401] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 207.971404] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 207.971406] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 207.971423] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 207.972674] % rmmod test_klp_callbacks_mod [ 207.973849] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 207.973866] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 207.973868] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 207.973870] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 208.050976] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 208.050996] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 208.051017] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 208.051018] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 208.051020] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 208.911216] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 208.912965] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 208.912967] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 208.912969] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 208.959486] % rmmod test_klp_callbacks_demo [ 209.071781] % rmmod test_klp_callbacks_busy [ 209.072943] test_klp_callbacks_busy: test_klp_callbacks_busy_exit [ 209.149873] ===== TEST: busy target module ===== [ 209.152833] % modprobe test_klp_callbacks_busy block_transition=Y [ 209.154258] test_klp_callbacks_busy: test_klp_callbacks_busy_init [ 209.154262] test_klp_callbacks_busy: busymod_work_func enter [ 209.157628] % modprobe test_klp_callbacks_demo [ 209.159018] livepatch: enabling patch 'test_klp_callbacks_demo' [ 209.159020] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 209.159040] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 209.159041] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 209.160430] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 209.165518] % modprobe test_klp_callbacks_mod [ 209.166893] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 209.166896] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 209.166914] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 209.168092] % rmmod test_klp_callbacks_mod [ 209.169182] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 209.169198] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 209.169200] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 209.250960] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 209.250978] livepatch: 'test_klp_callbacks_demo': reversing transition from patching to unpatching [ 209.251083] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 211.871203] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 211.872965] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 211.872967] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 211.872969] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 211.971835] % rmmod test_klp_callbacks_demo [ 212.051698] % rmmod test_klp_callbacks_busy [ 212.090506] test_klp_callbacks_busy: busymod_work_func exit [ 212.090513] test_klp_callbacks_busy: test_klp_callbacks_busy_exit [ 212.169096] ===== TEST: multiple livepatches ===== [ 212.172221] % modprobe test_klp_callbacks_demo [ 212.173625] livepatch: enabling patch 'test_klp_callbacks_demo' [ 212.173627] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 212.173645] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 212.173646] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 213.881119] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 213.881238] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 213.881240] livepatch: 'test_klp_callbacks_demo': patching complete [ 213.904735] % modprobe test_klp_callbacks_demo2 [ 213.906252] livepatch: enabling patch 'test_klp_callbacks_demo2' [ 213.906254] livepatch: 'test_klp_callbacks_demo2': initializing patching transition [ 213.906291] test_klp_callbacks_demo2: pre_patch_callback: vmlinux [ 213.906292] livepatch: 'test_klp_callbacks_demo2': starting patching transition [ 214.911228] livepatch: 'test_klp_callbacks_demo2': completing patching transition [ 214.911330] test_klp_callbacks_demo2: post_patch_callback: vmlinux [ 214.911332] livepatch: 'test_klp_callbacks_demo2': patching complete [ 214.923290] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled [ 214.923309] livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition [ 214.923323] test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux [ 214.923324] livepatch: 'test_klp_callbacks_demo2': starting unpatching transition [ 215.951189] livepatch: 'test_klp_callbacks_demo2': completing unpatching transition [ 215.951289] test_klp_callbacks_demo2: post_unpatch_callback: vmlinux [ 215.951291] livepatch: 'test_klp_callbacks_demo2': unpatching complete [ 216.032305] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 216.032322] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 216.032338] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 216.032339] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 216.911208] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 216.911327] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 216.911329] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 216.941200] % rmmod test_klp_callbacks_demo2 [ 217.011815] % rmmod test_klp_callbacks_demo [ 217.089875] ===== TEST: atomic replace ===== [ 217.092945] % modprobe test_klp_callbacks_demo [ 217.094433] livepatch: enabling patch 'test_klp_callbacks_demo' [ 217.094436] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 217.094455] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 217.094457] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 217.951266] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 217.951371] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 217.951372] livepatch: 'test_klp_callbacks_demo': patching complete [ 218.014048] % modprobe test_klp_callbacks_demo2 replace=1 [ 218.015488] livepatch: enabling patch 'test_klp_callbacks_demo2' [ 218.015491] livepatch: 'test_klp_callbacks_demo2': initializing patching transition [ 218.015512] test_klp_callbacks_demo2: pre_patch_callback: vmlinux [ 218.015514] livepatch: 'test_klp_callbacks_demo2': starting patching transition [ 219.631259] livepatch: 'test_klp_callbacks_demo2': completing patching transition [ 219.631381] test_klp_callbacks_demo2: post_patch_callback: vmlinux [ 219.631383] livepatch: 'test_klp_callbacks_demo2': patching complete [ 219.643212] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled [ 219.643241] livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition [ 219.643273] test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux [ 219.643274] livepatch: 'test_klp_callbacks_demo2': starting unpatching transition [ 220.831217] livepatch: 'test_klp_callbacks_demo2': completing unpatching transition [ 220.831316] test_klp_callbacks_demo2: post_unpatch_callback: vmlinux [ 220.831318] livepatch: 'test_klp_callbacks_demo2': unpatching complete [ 220.853623] % rmmod test_klp_callbacks_demo2 [ 220.931690] % rmmod test_klp_callbacks_demo [ 221.032866] livepatch: kernel.ftrace_enabled = 1 [ 221.041249] ===== TEST: basic shadow variable API ===== [ 221.044342] % modprobe test_klp_shadow_vars [ 221.046005] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 [ 221.046008] test_klp_shadow_vars: got expected NULL result [ 221.046010] test_klp_shadow_vars: shadow_ctor: PTR3 -> PTR2 [ 221.046011] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 [ 221.046015] test_klp_shadow_vars: shadow_ctor: PTR6 -> PTR5 [ 221.046016] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR1, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR5 = PTR6 [ 221.046019] test_klp_shadow_vars: shadow_ctor: PTR8 -> PTR7 [ 221.046020] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 [ 221.046022] test_klp_shadow_vars: shadow_ctor: PTR11 -> PTR10 [ 221.046024] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR10 = PTR11 [ 221.046026] test_klp_shadow_vars: shadow_ctor: PTR13 -> PTR12 [ 221.046028] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 [ 221.046030] test_klp_shadow_vars: shadow_ctor: PTR16 -> PTR15 [ 221.046031] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR14, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR15 = PTR16 [ 221.046034] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR3 [ 221.046035] test_klp_shadow_vars: got expected PTR3 -> PTR2 result [ 221.046036] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 [ 221.046038] test_klp_shadow_vars: got expected PTR6 -> PTR5 result [ 221.046039] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR8 [ 221.046041] test_klp_shadow_vars: got expected PTR8 -> PTR7 result [ 221.046042] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 [ 221.046043] test_klp_shadow_vars: got expected PTR11 -> PTR10 result [ 221.046045] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR13 [ 221.046046] test_klp_shadow_vars: got expected PTR13 -> PTR12 result [ 221.046047] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 [ 221.046049] test_klp_shadow_vars: got expected PTR16 -> PTR15 result [ 221.046050] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 [ 221.046052] test_klp_shadow_vars: got expected PTR3 -> PTR2 result [ 221.046054] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 [ 221.046056] test_klp_shadow_vars: got expected PTR8 -> PTR7 result [ 221.046057] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 [ 221.046059] test_klp_shadow_vars: got expected PTR13 -> PTR12 result [ 221.046061] test_klp_shadow_vars: shadow_dtor(obj=PTR1, shadow_data=PTR3) [ 221.046063] test_klp_shadow_vars: klp_shadow_free(obj=PTR1, id=0x1234, dtor=PTR17) [ 221.046064] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 [ 221.046066] test_klp_shadow_vars: got expected NULL result [ 221.046067] test_klp_shadow_vars: shadow_dtor(obj=PTR9, shadow_data=PTR8) [ 221.046068] test_klp_shadow_vars: klp_shadow_free(obj=PTR9, id=0x1234, dtor=PTR17) [ 221.046070] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR0 [ 221.046071] test_klp_shadow_vars: got expected NULL result [ 221.046072] test_klp_shadow_vars: shadow_dtor(obj=PTR14, shadow_data=PTR13) [ 221.046073] test_klp_shadow_vars: klp_shadow_free(obj=PTR14, id=0x1234, dtor=PTR17) [ 221.046075] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR0 [ 221.046076] test_klp_shadow_vars: got expected NULL result [ 221.046077] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 [ 221.046079] test_klp_shadow_vars: got expected PTR6 -> PTR5 result [ 221.046080] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 [ 221.046081] test_klp_shadow_vars: got expected PTR11 -> PTR10 result [ 221.046083] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 [ 221.046084] test_klp_shadow_vars: got expected PTR16 -> PTR15 result [ 221.046092] test_klp_shadow_vars: klp_shadow_free_all(id=0x1235, dtor=PTR0) [ 221.046093] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR0 [ 221.046094] test_klp_shadow_vars: got expected NULL result [ 221.046095] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR0 [ 221.046097] test_klp_shadow_vars: got expected NULL result [ 221.046098] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR0 [ 221.046099] test_klp_shadow_vars: got expected NULL result [ 221.047460] % rmmod test_klp_shadow_vars [ 221.132199] livepatch: kernel.ftrace_enabled = 1 [ 221.140198] ===== TEST: system state modification ===== [ 221.143166] % modprobe test_klp_state [ 221.144614] livepatch: enabling patch 'test_klp_state' [ 221.144616] livepatch: 'test_klp_state': initializing patching transition [ 221.144637] test_klp_state: pre_patch_callback: vmlinux [ 221.144638] test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel [ 221.144639] livepatch: 'test_klp_state': starting patching transition [ 222.111272] livepatch: 'test_klp_state': completing patching transition [ 222.111377] test_klp_state: post_patch_callback: vmlinux [ 222.111379] test_klp_state: fix_console_loglevel: fixing console_loglevel [ 222.111381] livepatch: 'test_klp_state': patching complete [ 222.162434] % echo 0 > /sys/kernel/livepatch/test_klp_state/enabled [ 222.162453] livepatch: 'test_klp_state': initializing unpatching transition [ 222.162474] test_klp_state: pre_unpatch_callback: vmlinux [ 222.162476] test_klp_state: restore_console_loglevel: restoring console_loglevel [ 222.162477] livepatch: 'test_klp_state': starting unpatching transition [ 223.951243] livepatch: 'test_klp_state': completing unpatching transition [ 223.951343] test_klp_state: post_unpatch_callback: vmlinux [ 223.951345] test_klp_state: free_loglevel_state: freeing space for the stored console_loglevel [ 223.951346] livepatch: 'test_klp_state': unpatching complete [ 223.978524] % rmmod test_klp_state [ 224.049861] ===== TEST: taking over system state modification ===== [ 224.052982] % modprobe test_klp_state [ 224.054535] livepatch: enabling patch 'test_klp_state' [ 224.054537] livepatch: 'test_klp_state': initializing patching transition [ 224.054558] test_klp_state: pre_patch_callback: vmlinux [ 224.054559] test_klp_state: allocate_loglevel_state: allocating space to store console_loglevel [ 224.054561] livepatch: 'test_klp_state': starting patching transition [ 224.921252] livepatch: 'test_klp_state': completing patching transition [ 224.921353] test_klp_state: post_patch_callback: vmlinux [ 224.921355] test_klp_state: fix_console_loglevel: fixing console_loglevel [ 224.921357] livepatch: 'test_klp_state': patching complete [ 224.974637] % modprobe test_klp_state2 [ 224.976246] livepatch: enabling patch 'test_klp_state2' [ 224.976248] livepatch: 'test_klp_state2': initializing patching transition [ 224.976275] test_klp_state2: pre_patch_callback: vmlinux [ 224.976276] test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated [ 224.976278] livepatch: 'test_klp_state2': starting patching transition [ 226.031256] livepatch: 'test_klp_state2': completing patching transition [ 226.031388] test_klp_state2: post_patch_callback: vmlinux [ 226.031389] test_klp_state2: fix_console_loglevel: taking over the console_loglevel change [ 226.031390] livepatch: 'test_klp_state2': patching complete [ 226.097150] % rmmod test_klp_state [ 226.170953] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 226.170972] livepatch: 'test_klp_state2': initializing unpatching transition [ 226.170994] test_klp_state2: pre_unpatch_callback: vmlinux [ 226.170995] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 226.170996] livepatch: 'test_klp_state2': starting unpatching transition [ 227.951209] livepatch: 'test_klp_state2': completing unpatching transition [ 227.951314] test_klp_state2: post_unpatch_callback: vmlinux [ 227.951317] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 227.951318] livepatch: 'test_klp_state2': unpatching complete [ 227.987229] % rmmod test_klp_state2 [ 228.048401] ===== TEST: compatible cumulative livepatches ===== [ 228.051472] % modprobe test_klp_state2 [ 228.052836] livepatch: enabling patch 'test_klp_state2' [ 228.052839] livepatch: 'test_klp_state2': initializing patching transition [ 228.052858] test_klp_state2: pre_patch_callback: vmlinux [ 228.052860] test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel [ 228.052861] livepatch: 'test_klp_state2': starting patching transition [ 229.071292] livepatch: 'test_klp_state2': completing patching transition [ 229.071407] test_klp_state2: post_patch_callback: vmlinux [ 229.071409] test_klp_state2: fix_console_loglevel: fixing console_loglevel [ 229.071410] livepatch: 'test_klp_state2': patching complete [ 229.174501] % modprobe test_klp_state3 [ 229.175964] livepatch: enabling patch 'test_klp_state3' [ 229.175966] livepatch: 'test_klp_state3': initializing patching transition [ 229.175984] test_klp_state3: pre_patch_callback: vmlinux [ 229.175985] test_klp_state3: allocate_loglevel_state: space to store console_loglevel already allocated [ 229.175986] livepatch: 'test_klp_state3': starting patching transition [ 230.031287] livepatch: 'test_klp_state3': completing patching transition [ 230.031407] test_klp_state3: post_patch_callback: vmlinux [ 230.031409] test_klp_state3: fix_console_loglevel: taking over the console_loglevel change [ 230.031410] livepatch: 'test_klp_state3': patching complete [ 230.092633] % rmmod test_klp_state2 [ 230.174017] % modprobe test_klp_state2 [ 230.175415] livepatch: enabling patch 'test_klp_state2' [ 230.175416] livepatch: 'test_klp_state2': initializing patching transition [ 230.175437] test_klp_state2: pre_patch_callback: vmlinux [ 230.175438] test_klp_state2: allocate_loglevel_state: space to store console_loglevel already allocated [ 230.175453] livepatch: 'test_klp_state2': starting patching transition [ 231.871289] livepatch: 'test_klp_state2': completing patching transition [ 231.871392] test_klp_state2: post_patch_callback: vmlinux [ 231.871393] test_klp_state2: fix_console_loglevel: taking over the console_loglevel change [ 231.871394] livepatch: 'test_klp_state2': patching complete [ 231.902873] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 231.902893] livepatch: 'test_klp_state2': initializing unpatching transition [ 231.902909] test_klp_state2: pre_unpatch_callback: vmlinux [ 231.902910] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 231.902911] livepatch: 'test_klp_state2': starting unpatching transition [ 232.831270] livepatch: 'test_klp_state2': completing unpatching transition [ 232.831371] test_klp_state2: post_unpatch_callback: vmlinux [ 232.831373] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 232.831374] livepatch: 'test_klp_state2': unpatching complete [ 232.912312] % rmmod test_klp_state2 [ 232.961704] % rmmod test_klp_state3 [ 233.039460] ===== TEST: incompatible cumulative livepatches ===== [ 233.042189] % modprobe test_klp_state2 [ 233.043520] livepatch: enabling patch 'test_klp_state2' [ 233.043522] livepatch: 'test_klp_state2': initializing patching transition [ 233.043542] test_klp_state2: pre_patch_callback: vmlinux [ 233.043543] test_klp_state2: allocate_loglevel_state: allocating space to store console_loglevel [ 233.043545] livepatch: 'test_klp_state2': starting patching transition [ 234.191241] livepatch: 'test_klp_state2': completing patching transition [ 234.191348] test_klp_state2: post_patch_callback: vmlinux [ 234.191365] test_klp_state2: fix_console_loglevel: fixing console_loglevel [ 234.191368] livepatch: 'test_klp_state2': patching complete [ 234.263631] % modprobe test_klp_state [ 234.265068] livepatch: Livepatch patch (test_klp_state) is not compatible with the already installed livepatches. [ 234.380932] modprobe: ERROR: could not insert 'test_klp_state': Invalid argument [ 234.380979] % echo 0 > /sys/kernel/livepatch/test_klp_state2/enabled [ 234.380997] livepatch: 'test_klp_state2': initializing unpatching transition [ 234.381018] test_klp_state2: pre_unpatch_callback: vmlinux [ 234.381019] test_klp_state2: restore_console_loglevel: restoring console_loglevel [ 234.381020] livepatch: 'test_klp_state2': starting unpatching transition [ 235.951273] livepatch: 'test_klp_state2': completing unpatching transition [ 235.951373] test_klp_state2: post_unpatch_callback: vmlinux [ 235.951375] test_klp_state2: free_loglevel_state: freeing space for the stored console_loglevel [ 235.951376] livepatch: 'test_klp_state2': unpatching complete [ 235.994953] % rmmod test_klp_state2 [ 236.093180] livepatch: kernel.ftrace_enabled = 1 [ 236.101310] ===== TEST: livepatch interaction with ftrace_enabled sysctl ===== [ 236.102950] livepatch: kernel.ftrace_enabled = 0 [ 236.103030] % modprobe test_klp_livepatch [ 236.104411] livepatch: enabling patch 'test_klp_livepatch' [ 236.104414] livepatch: 'test_klp_livepatch': initializing patching transition [ 236.104437] livepatch: failed to register ftrace handler for function 'cmdline_proc_show' (-16) [ 236.104439] livepatch: failed to patch object 'vmlinux' [ 236.104440] livepatch: failed to enable patch 'test_klp_livepatch' [ 236.104441] livepatch: 'test_klp_livepatch': canceling patching transition, going to unpatch [ 236.104442] livepatch: 'test_klp_livepatch': completing unpatching transition [ 236.104560] livepatch: 'test_klp_livepatch': unpatching complete [ 236.260929] modprobe: ERROR: could not insert 'test_klp_livepatch': Device or resource busy [ 236.262507] livepatch: kernel.ftrace_enabled = 1 [ 236.265215] % modprobe test_klp_livepatch [ 236.266486] livepatch: enabling patch 'test_klp_livepatch' [ 236.266488] livepatch: 'test_klp_livepatch': initializing patching transition [ 236.267596] livepatch: 'test_klp_livepatch': starting patching transition [ 237.791212] livepatch: 'test_klp_livepatch': completing patching transition [ 237.791310] livepatch: 'test_klp_livepatch': patching complete [ 237.797154] livepatch: sysctl: setting key "kernel.ftrace_enabled": Device or resource busy [ 237.798043] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 237.798095] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 237.798109] livepatch: 'test_klp_livepatch': starting unpatching transition [ 238.831322] livepatch: 'test_klp_livepatch': completing unpatching transition [ 238.832826] livepatch: 'test_klp_livepatch': unpatching complete [ 238.908640] % rmmod test_klp_livepatch [ 238.992263] livepatch: kernel.ftrace_enabled = 1 [ 238.999933] ===== TEST: sysfs test ===== [ 239.002807] % modprobe test_klp_livepatch [ 239.004110] livepatch: enabling patch 'test_klp_livepatch' [ 239.004111] livepatch: 'test_klp_livepatch': initializing patching transition [ 239.005181] livepatch: 'test_klp_livepatch': starting patching transition [ 240.111262] livepatch: 'test_klp_livepatch': completing patching transition [ 240.111381] livepatch: 'test_klp_livepatch': patching complete [ 240.132783] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 240.132799] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 240.132815] livepatch: 'test_klp_livepatch': starting unpatching transition [ 241.081328] livepatch: 'test_klp_livepatch': completing unpatching transition [ 241.082831] livepatch: 'test_klp_livepatch': unpatching complete [ 241.142598] % rmmod test_klp_livepatch [ 241.210158] ===== TEST: sysfs test object/patched ===== [ 241.213283] % modprobe test_klp_callbacks_demo [ 241.214762] livepatch: enabling patch 'test_klp_callbacks_demo' [ 241.214764] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 241.214784] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 241.214785] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 242.031320] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 242.031449] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 242.031451] livepatch: 'test_klp_callbacks_demo': patching complete [ 242.136182] % modprobe test_klp_callbacks_mod [ 242.137515] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 242.137517] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 242.137519] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 242.137535] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 242.139783] % rmmod test_klp_callbacks_mod [ 242.140942] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 242.140957] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 242.140959] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 242.140960] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 242.231991] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 242.232011] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 242.232030] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 242.232032] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 243.071322] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 243.071422] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 243.071424] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 243.141124] % rmmod test_klp_callbacks_demo [ 243.282256] livepatch: kernel.ftrace_enabled = 1 [ 243.290569] ===== TEST: basic function patching ===== [ 243.293596] % modprobe test_klp_livepatch [ 243.295013] livepatch: enabling patch 'test_klp_livepatch' [ 243.295016] livepatch: 'test_klp_livepatch': initializing patching transition [ 243.296162] livepatch: 'test_klp_livepatch': starting patching transition [ 244.911383] livepatch: 'test_klp_livepatch': completing patching transition [ 244.911489] livepatch: 'test_klp_livepatch': patching complete [ 244.924091] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 244.924112] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 244.924134] livepatch: 'test_klp_livepatch': starting unpatching transition [ 245.871319] livepatch: 'test_klp_livepatch': completing unpatching transition [ 245.872799] livepatch: 'test_klp_livepatch': unpatching complete [ 245.934000] % rmmod test_klp_livepatch [ 246.029530] ===== TEST: multiple livepatches ===== [ 246.032436] % modprobe test_klp_livepatch [ 246.033861] livepatch: enabling patch 'test_klp_livepatch' [ 246.033863] livepatch: 'test_klp_livepatch': initializing patching transition [ 246.034968] livepatch: 'test_klp_livepatch': starting patching transition [ 247.711339] livepatch: 'test_klp_livepatch': completing patching transition [ 247.711489] livepatch: 'test_klp_livepatch': patching complete [ 247.763427] test_klp_livepatch: this has been live patched [ 247.767396] % modprobe test_klp_atomic_replace replace=0 [ 247.768853] livepatch: enabling patch 'test_klp_atomic_replace' [ 247.768854] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 247.769960] livepatch: 'test_klp_atomic_replace': starting patching transition [ 248.751335] livepatch: 'test_klp_atomic_replace': completing patching transition [ 248.751471] livepatch: 'test_klp_atomic_replace': patching complete [ 248.788134] test_klp_livepatch: this has been live patched [ 248.789014] test_klp_atomic_replace: this has been live patched [ 248.789161] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 248.789181] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 248.789197] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 249.711272] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 249.712588] livepatch: 'test_klp_atomic_replace': unpatching complete [ 249.798070] % rmmod test_klp_atomic_replace [ 249.851728] test_klp_livepatch: this has been live patched [ 249.852707] % echo 0 > /sys/kernel/livepatch/test_klp_livepatch/enabled [ 249.852727] livepatch: 'test_klp_livepatch': initializing unpatching transition [ 249.852745] livepatch: 'test_klp_livepatch': starting unpatching transition [ 250.751345] livepatch: 'test_klp_livepatch': completing unpatching transition [ 250.752836] livepatch: 'test_klp_livepatch': unpatching complete [ 250.761513] % rmmod test_klp_livepatch [ 250.851360] ===== TEST: atomic replace livepatch ===== [ 250.854431] % modprobe test_klp_livepatch [ 250.855791] livepatch: enabling patch 'test_klp_livepatch' [ 250.855793] livepatch: 'test_klp_livepatch': initializing patching transition [ 250.856996] livepatch: 'test_klp_livepatch': starting patching transition [ 251.711343] livepatch: 'test_klp_livepatch': completing patching transition [ 251.711461] livepatch: 'test_klp_livepatch': patching complete [ 251.773219] test_klp_livepatch: this has been live patched [ 251.777357] % modprobe test_klp_atomic_replace replace=1 [ 251.778873] livepatch: enabling patch 'test_klp_atomic_replace' [ 251.778875] livepatch: 'test_klp_atomic_replace': initializing patching transition [ 251.780049] livepatch: 'test_klp_atomic_replace': starting patching transition [ 252.911301] livepatch: 'test_klp_atomic_replace': completing patching transition [ 252.912669] livepatch: 'test_klp_atomic_replace': patching complete [ 253.001881] test_klp_atomic_replace: this has been live patched [ 253.002864] % rmmod test_klp_livepatch [ 253.052447] test_klp_atomic_replace: this has been live patched [ 253.052561] % echo 0 > /sys/kernel/livepatch/test_klp_atomic_replace/enabled [ 253.052580] livepatch: 'test_klp_atomic_replace': initializing unpatching transition [ 253.052597] livepatch: 'test_klp_atomic_replace': starting unpatching transition [ 253.871341] livepatch: 'test_klp_atomic_replace': completing unpatching transition [ 253.872934] livepatch: 'test_klp_atomic_replace': unpatching complete [ 253.961071] % rmmod test_klp_atomic_replace [ 254.075347] livepatch: kernel.ftrace_enabled = 1 [ 254.083375] ===== TEST: target module before livepatch ===== [ 254.086470] % modprobe test_klp_callbacks_mod [ 254.087750] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 254.091112] % modprobe test_klp_callbacks_demo [ 254.092572] livepatch: enabling patch 'test_klp_callbacks_demo' [ 254.092574] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 254.092593] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 254.092594] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 254.092595] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 254.911372] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 254.911470] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 254.911472] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 254.911474] livepatch: 'test_klp_callbacks_demo': patching complete [ 255.008950] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 255.008969] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 255.009000] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 255.009002] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 255.009020] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 255.951355] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 255.951452] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 255.951454] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 255.951456] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 256.018607] % rmmod test_klp_callbacks_demo [ 256.091916] % rmmod test_klp_callbacks_mod [ 256.093014] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 256.169237] ===== TEST: module_coming notifier ===== [ 256.172297] % modprobe test_klp_callbacks_demo [ 256.173751] livepatch: enabling patch 'test_klp_callbacks_demo' [ 256.173753] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 256.173772] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 256.173774] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 257.871420] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 257.871550] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 257.871552] livepatch: 'test_klp_callbacks_demo': patching complete [ 257.906694] % modprobe test_klp_callbacks_mod [ 257.907956] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 257.907958] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 257.907959] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 257.907977] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 257.908350] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 257.908367] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 257.908387] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 257.908388] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 257.908390] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 258.911396] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 258.911552] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 258.911554] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 258.911556] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 258.918270] % rmmod test_klp_callbacks_demo [ 259.001970] % rmmod test_klp_callbacks_mod [ 259.002953] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 259.118512] ===== TEST: module_going notifier ===== [ 259.121469] % modprobe test_klp_callbacks_mod [ 259.122753] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 259.125852] % modprobe test_klp_callbacks_demo [ 259.127258] livepatch: enabling patch 'test_klp_callbacks_demo' [ 259.127259] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 259.127280] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 259.127281] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 259.127282] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 260.191345] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 260.191448] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 260.191449] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_LIVE] Normal state [ 260.191451] livepatch: 'test_klp_callbacks_demo': patching complete [ 260.248083] % rmmod test_klp_callbacks_mod [ 260.249312] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 260.249330] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 260.249332] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 260.249333] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 260.311104] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 260.311123] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 260.311150] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 260.311151] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 261.151436] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 261.151581] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 261.151583] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 261.220008] % rmmod test_klp_callbacks_demo [ 261.309304] ===== TEST: module_coming and module_going notifiers ===== [ 261.312251] % modprobe test_klp_callbacks_demo [ 261.313722] livepatch: enabling patch 'test_klp_callbacks_demo' [ 261.313724] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 261.313762] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 261.313763] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 262.671500] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 262.671624] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 262.671626] livepatch: 'test_klp_callbacks_demo': patching complete [ 262.742090] % modprobe test_klp_callbacks_mod [ 262.743321] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 262.743324] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 262.743326] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 262.743344] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 262.744479] % rmmod test_klp_callbacks_mod [ 262.745567] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 262.745582] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 262.745584] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 262.745585] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 262.811091] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 262.811109] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 262.811130] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 262.811131] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 263.951430] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 263.951537] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 263.951539] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 264.022343] % rmmod test_klp_callbacks_demo [ 264.179776] ===== TEST: target module not present ===== [ 264.182883] % modprobe test_klp_callbacks_demo [ 264.184345] livepatch: enabling patch 'test_klp_callbacks_demo' [ 264.184347] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 264.184367] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 264.184368] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 265.081369] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 265.081514] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 265.081516] livepatch: 'test_klp_callbacks_demo': patching complete [ 265.101043] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 265.101062] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 265.101083] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 265.101084] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 266.191411] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 266.191510] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 266.191512] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 266.211817] % rmmod test_klp_callbacks_demo [ 266.279575] ===== TEST: pre-patch callback -ENODEV ===== [ 266.282491] % modprobe test_klp_callbacks_mod [ 266.283760] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 266.284111] % modprobe test_klp_callbacks_demo pre_patch_ret=-19 [ 266.285525] livepatch: enabling patch 'test_klp_callbacks_demo' [ 266.285527] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 266.285548] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 266.285549] livepatch: pre-patch callback failed for object 'vmlinux' [ 266.285550] livepatch: failed to enable patch 'test_klp_callbacks_demo' [ 266.285551] livepatch: 'test_klp_callbacks_demo': canceling patching transition, going to unpatch [ 266.285552] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 266.285659] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 266.481071] modprobe: ERROR: could not insert 'test_klp_callbacks_demo': No such device [ 266.482054] % rmmod test_klp_callbacks_mod [ 266.483170] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 266.569358] ===== TEST: module_coming + pre-patch callback -ENODEV ===== [ 266.572523] % modprobe test_klp_callbacks_demo [ 266.573921] livepatch: enabling patch 'test_klp_callbacks_demo' [ 266.573924] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 266.573963] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 266.573965] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 268.031434] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 268.031535] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 268.031537] livepatch: 'test_klp_callbacks_demo': patching complete [ 268.100668] % echo -19 > /sys/module/test_klp_callbacks_demo/parameters/pre_patch_ret [ 268.101662] % modprobe test_klp_callbacks_mod [ 268.102985] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 268.102988] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 268.102990] livepatch: pre-patch callback failed for object 'test_klp_callbacks_mod' [ 268.102991] livepatch: patch 'test_klp_callbacks_demo' failed for module 'test_klp_callbacks_mod', refusing to load module 'test_klp_callbacks_mod' [ 268.231087] modprobe: ERROR: could not insert 'test_klp_callbacks_mod': No such device [ 268.231141] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 268.231156] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 268.231176] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 268.231177] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 269.951417] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 269.951520] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 269.951522] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 270.048128] % rmmod test_klp_callbacks_demo [ 270.110260] ===== TEST: multiple target modules ===== [ 270.113377] % modprobe test_klp_callbacks_busy block_transition=N [ 270.114847] test_klp_callbacks_busy: test_klp_callbacks_busy_init [ 270.114851] test_klp_callbacks_busy: busymod_work_func enter [ 270.114853] test_klp_callbacks_busy: busymod_work_func exit [ 270.118456] % modprobe test_klp_callbacks_demo [ 270.119920] livepatch: enabling patch 'test_klp_callbacks_demo' [ 270.119922] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 270.119941] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 270.119943] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 270.121350] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 271.871484] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 271.871585] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 271.871587] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 271.871589] livepatch: 'test_klp_callbacks_demo': patching complete [ 271.957226] % modprobe test_klp_callbacks_mod [ 271.958646] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 271.958665] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 271.958667] test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 271.958683] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 271.960010] % rmmod test_klp_callbacks_mod [ 271.961127] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 271.961141] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 271.961143] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 271.961145] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 272.031267] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 272.031285] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 272.031303] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 272.031304] test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 272.031306] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 272.831467] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 272.833230] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 272.833232] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 272.833233] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 272.839688] % rmmod test_klp_callbacks_demo [ 272.912113] % rmmod test_klp_callbacks_busy [ 272.913268] test_klp_callbacks_busy: test_klp_callbacks_busy_exit [ 272.989731] ===== TEST: busy target module ===== [ 272.992863] % modprobe test_klp_callbacks_busy block_transition=Y [ 272.994427] test_klp_callbacks_busy: test_klp_callbacks_busy_init [ 272.994433] test_klp_callbacks_busy: busymod_work_func enter [ 272.997897] % modprobe test_klp_callbacks_demo [ 272.999390] livepatch: enabling patch 'test_klp_callbacks_demo' [ 272.999391] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 272.999413] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 272.999415] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 273.000863] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 273.006166] % modprobe test_klp_callbacks_mod [ 273.007622] livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' [ 273.007624] test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init [ 273.007651] test_klp_callbacks_mod: test_klp_callbacks_mod_init [ 273.009014] % rmmod test_klp_callbacks_mod [ 273.010123] test_klp_callbacks_mod: test_klp_callbacks_mod_exit [ 273.010139] livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' [ 273.010141] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away [ 273.091251] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 273.091269] livepatch: 'test_klp_callbacks_demo': reversing transition from patching to unpatching [ 273.091425] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 275.791451] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 275.793206] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 275.793209] test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_busy -> [MODULE_STATE_LIVE] Normal state [ 275.793210] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 275.815309] % rmmod test_klp_callbacks_demo [ 275.882051] % rmmod test_klp_callbacks_busy [ 275.890764] test_klp_callbacks_busy: busymod_work_func exit [ 275.890773] test_klp_callbacks_busy: test_klp_callbacks_busy_exit [ 275.959816] ===== TEST: multiple livepatches ===== [ 275.963029] % modprobe test_klp_callbacks_demo [ 275.964604] livepatch: enabling patch 'test_klp_callbacks_demo' [ 275.964606] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 275.964628] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 275.964629] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 277.641504] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 277.641611] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 277.641613] livepatch: 'test_klp_callbacks_demo': patching complete [ 277.698468] % modprobe test_klp_callbacks_demo2 [ 277.700098] livepatch: enabling patch 'test_klp_callbacks_demo2' [ 277.700100] livepatch: 'test_klp_callbacks_demo2': initializing patching transition [ 277.700119] test_klp_callbacks_demo2: pre_patch_callback: vmlinux [ 277.700120] livepatch: 'test_klp_callbacks_demo2': starting patching transition [ 278.681475] livepatch: 'test_klp_callbacks_demo2': completing patching transition [ 278.681615] test_klp_callbacks_demo2: post_patch_callback: vmlinux [ 278.681617] livepatch: 'test_klp_callbacks_demo2': patching complete [ 278.719462] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled [ 278.719482] livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition [ 278.719504] test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux [ 278.719505] livepatch: 'test_klp_callbacks_demo2': starting unpatching transition [ 279.791389] livepatch: 'test_klp_callbacks_demo2': completing unpatching transition [ 279.791487] test_klp_callbacks_demo2: post_unpatch_callback: vmlinux [ 279.791489] livepatch: 'test_klp_callbacks_demo2': unpatching complete [ 279.829592] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled [ 279.829612] livepatch: 'test_klp_callbacks_demo': initializing unpatching transition [ 279.829629] test_klp_callbacks_demo: pre_unpatch_callback: vmlinux [ 279.829630] livepatch: 'test_klp_callbacks_demo': starting unpatching transition [ 280.831497] livepatch: 'test_klp_callbacks_demo': completing unpatching transition [ 280.831602] test_klp_callbacks_demo: post_unpatch_callback: vmlinux [ 280.831604] livepatch: 'test_klp_callbacks_demo': unpatching complete [ 280.839540] % rmmod test_klp_callbacks_demo2 [ 280.912127] % rmmod test_klp_callbacks_demo [ 280.989065] ===== TEST: atomic replace ===== [ 280.991951] % modprobe test_klp_callbacks_demo [ 280.993414] livepatch: enabling patch 'test_klp_callbacks_demo' [ 280.993416] livepatch: 'test_klp_callbacks_demo': initializing patching transition [ 280.993436] test_klp_callbacks_demo: pre_patch_callback: vmlinux [ 280.993437] livepatch: 'test_klp_callbacks_demo': starting patching transition [ 281.871479] livepatch: 'test_klp_callbacks_demo': completing patching transition [ 281.871579] test_klp_callbacks_demo: post_patch_callback: vmlinux [ 281.871581] livepatch: 'test_klp_callbacks_demo': patching complete [ 281.912919] % modprobe test_klp_callbacks_demo2 replace=1 [ 281.914353] livepatch: enabling patch 'test_klp_callbacks_demo2' [ 281.914356] livepatch: 'test_klp_callbacks_demo2': initializing patching transition [ 281.914376] test_klp_callbacks_demo2: pre_patch_callback: vmlinux [ 281.914377] livepatch: 'test_klp_callbacks_demo2': starting patching transition [ 283.071478] livepatch: 'test_klp_callbacks_demo2': completing patching transition [ 283.071583] test_klp_callbacks_demo2: post_patch_callback: vmlinux [ 283.071585] livepatch: 'test_klp_callbacks_demo2': patching complete [ 283.135341] % echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo2/enabled [ 283.135361] livepatch: 'test_klp_callbacks_demo2': initializing unpatching transition [ 283.135381] test_klp_callbacks_demo2: pre_unpatch_callback: vmlinux [ 283.135382] livepatch: 'test_klp_callbacks_demo2': starting unpatching transition [ 284.031462] livepatch: 'test_klp_callbacks_demo2': completing unpatching transition [ 284.031579] test_klp_callbacks_demo2: post_unpatch_callback: vmlinux [ 284.031580] livepatch: 'test_klp_callbacks_demo2': unpatching complete [ 284.044328] % rmmod test_klp_callbacks_demo2 [ 284.112113] % rmmod test_klp_callbacks_demo [ 284.224335] livepatch: kernel.ftrace_enabled = 1 [ 284.232921] ===== TEST: basic shadow variable API ===== [ 284.235963] % modprobe test_klp_shadow_vars [ 284.237528] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 [ 284.237531] test_klp_shadow_vars: got expected NULL result [ 284.237533] test_klp_shadow_vars: shadow_ctor: PTR3 -> PTR2 [ 284.237535] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 [ 284.237538] test_klp_shadow_vars: shadow_ctor: PTR6 -> PTR5 [ 284.237539] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR1, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR5 = PTR6 [ 284.237542] test_klp_shadow_vars: shadow_ctor: PTR8 -> PTR7 [ 284.237543] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 [ 284.237545] test_klp_shadow_vars: shadow_ctor: PTR11 -> PTR10 [ 284.237547] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR9, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR10 = PTR11 [ 284.237549] test_klp_shadow_vars: shadow_ctor: PTR13 -> PTR12 [ 284.237550] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 [ 284.237553] test_klp_shadow_vars: shadow_ctor: PTR16 -> PTR15 [ 284.237554] test_klp_shadow_vars: klp_shadow_alloc(obj=PTR14, id=0x1235, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR15 = PTR16 [ 284.237556] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR3 [ 284.237558] test_klp_shadow_vars: got expected PTR3 -> PTR2 result [ 284.237559] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 [ 284.237561] test_klp_shadow_vars: got expected PTR6 -> PTR5 result [ 284.237562] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR8 [ 284.237564] test_klp_shadow_vars: got expected PTR8 -> PTR7 result [ 284.237565] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 [ 284.237566] test_klp_shadow_vars: got expected PTR11 -> PTR10 result [ 284.237567] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR13 [ 284.237569] test_klp_shadow_vars: got expected PTR13 -> PTR12 result [ 284.237570] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 [ 284.237571] test_klp_shadow_vars: got expected PTR16 -> PTR15 result [ 284.237573] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR1, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR2 = PTR3 [ 284.237575] test_klp_shadow_vars: got expected PTR3 -> PTR2 result [ 284.237576] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR9, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR7 = PTR8 [ 284.237579] test_klp_shadow_vars: got expected PTR8 -> PTR7 result [ 284.237580] test_klp_shadow_vars: klp_shadow_get_or_alloc(obj=PTR14, id=0x1234, size=8, gfp_flags=GFP_KERNEL), ctor=PTR4, ctor_data=PTR12 = PTR13 [ 284.237582] test_klp_shadow_vars: got expected PTR13 -> PTR12 result [ 284.237583] test_klp_shadow_vars: shadow_dtor(obj=PTR1, shadow_data=PTR3) [ 284.237585] test_klp_shadow_vars: klp_shadow_free(obj=PTR1, id=0x1234, dtor=PTR17) [ 284.237587] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0 [ 284.237588] test_klp_shadow_vars: got expected NULL result [ 284.237589] test_klp_shadow_vars: shadow_dtor(obj=PTR9, shadow_data=PTR8) [ 284.237590] test_klp_shadow_vars: klp_shadow_free(obj=PTR9, id=0x1234, dtor=PTR17) [ 284.237592] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1234) = PTR0 [ 284.237593] test_klp_shadow_vars: got expected NULL result [ 284.237594] test_klp_shadow_vars: shadow_dtor(obj=PTR14, shadow_data=PTR13) [ 284.237596] test_klp_shadow_vars: klp_shadow_free(obj=PTR14, id=0x1234, dtor=PTR17) [ 284.237597] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1234) = PTR0 [ 284.237598] test_klp_shadow_vars: got expected NULL result [ 284.237599] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR6 [ 284.237601] test_klp_shadow_vars: got expected PTR6 -> PTR5 result [ 284.237602] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR11 [ 284.237603] test_klp_shadow_vars: got expected PTR11 -> PTR10 result [ 284.237604] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR16 [ 284.237606] test_klp_shadow_vars: got expected PTR16 -> PTR15 result [ 284.237615] test_klp_shadow_vars: klp_shadow_free_all(id=0x1235, dtor=PTR0) [ 284.237616] test_klp_shadow_vars: klp_shadow_get(obj=PTR1, id=0x1235) = PTR0 [ 284.237617] test_klp_shadow_vars: got expected NULL result [ 284.237618] test_klp_shadow_vars: klp_shadow_get(obj=PTR9, id=0x1235) = PTR0 [ 284.237620] test_klp_shadow_vars: got expected NULL result [ 284.237620] test_klp_shadow_vars: klp_shadow_get(obj=PTR14, id=0x1235) = PTR0 [ 284.237622] test_klp_shadow_vars: got expected NULL result [ 284.238829] % rmmod test_klp_shadow_vars
[ 98.820331] livepatch: 'test_klp_state2': starting patching transition [ 100.031067] livepatch: 'test_klp_state2': completing patching transition [ 284.224335] livepatch: kernel.ftrace_enabled = 1
[ 100.031067] livepatch: 'test_klp_state2': completing patching transition [ 284.224335] livepatch: kernel.ftrace_enabled = 1 [ 284.232921] ===== TEST: basic shadow variable API =====