[*] Binary protection state of keyctl

  
  	Full RELRO     Canary found      NX enabled   PIE enabled  No RPATH     No RUNPATH   No Symbols


[*] Function sprintf tear down of keyctl

    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/keyctl @ 0x2f28 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.00002f28 ()                              | void fcn_00002f28 (int16_t arg1, int16_t arg2) {
                                                         |     int16_t var_0h_9;
                                                         |     int16_t var_4h_9;
                                                         |     int32_t var_4h_23;
                                                         |     int16_t var_0h_8;
                                                         |     int16_t var_4h_8;
                                                         |     int32_t var_0h_20;
                                                         |     int32_t var_8h_16;
                                                         |     int32_t var_ch_14;
                                                         |     void * var_0h_10;
                                                         |     int16_t var_4h_7;
                                                         |     int32_t var_4h_24;
                                                         |     int32_t var_8h_17;
                                                         |     int32_t var_ch_15;
                                                         |     int16_t var_10h_4;
                                                         |     int16_t var_8h_5;
                                                         |     int16_t var_ch_5;
                                                         |     int16_t var_0h_11;
                                                         |     char * * var_4h_10;
                                                         |     int16_t var_8h_6;
                                                         |     int16_t var_ch_6;
                                                         |     int16_t var_10h;
                                                         |     int16_t var_14h;
                                                         |     char * * endptr;
                                                         |     int16_t var_0h_7;
                                                         |     int16_t var_4h_6;
                                                         |     int32_t var_0h_18;
                                                         |     int16_t var_0h_6;
                                                         |     int16_t var_4h_5;
                                                         |     int32_t var_0h_17;
                                                         |     int16_t var_0h_5;
                                                         |     int16_t var_8h_15;
                                                         |     int32_t var_ch_13;
                                                         |     int16_t var_0h_4;
                                                         |     int16_t var_0h_16;
                                                         |     int16_t var_0h_3;
                                                         |     char * s;
                                                         |     int16_t var_8h_4;
                                                         |     int16_t var_ch_4;
                                                         |     int32_t var_4h_22;
                                                         |     int32_t var_0h_21;
                                                         |     int16_t var_0h_2;
                                                         |     int16_t var_4h_4;
                                                         |     int16_t var_ch_12;
                                                         |     char * ptr;
                                                         |     int16_t var_4h_3;
                                                         |     size_t var_2eh;
                                                         |     int16_t var_0h_13;
                                                         |     int16_t var_4h_11;
                                                         |     int16_t var_8h_3;
                                                         |     int16_t var_ch_3;
                                                         |     int16_t var_4h_21;
                                                         |     int16_t var_48h_6;
                                                         |     int16_t var_48h_3;
                                                         |     int16_t var_1040h_6;
                                                         |     int16_t var_4h_20;
                                                         |     int32_t var_0h_22;
                                                         |     int32_t var_4h_25;
                                                         |     int16_t var_8h_12;
                                                         |     int16_t var_1040h_3;
                                                         |     size_t var_0h_14;
                                                         |     int16_t var_4h_12;
                                                         |     int16_t var_8h_2;
                                                         |     int16_t var_ch_2;
                                                         |     int16_t var_4h_19;
                                                         |     int16_t var_48h_5;
                                                         |     char * var_8h_13;
                                                         |     int32_t var_ch_11;
                                                         |     int16_t var_10h_3;
                                                         |     int16_t var_48h_2;
                                                         |     int16_t var_1040h_5;
                                                         |     int16_t var_4h_18;
                                                         |     int16_t var_1040h_2;
                                                         |     int32_t var_4h_26;
                                                         |     int16_t var_8h_10;
                                                         |     int16_t var_0h_15;
                                                         |     int16_t var_4h_13;
                                                         |     int16_t var_8h;
                                                         |     size_t var_32h;
                                                         |     int16_t var_ch;
                                                         |     int16_t var_4h_17;
                                                         |     int16_t var_48h_4;
                                                         |     char * var_8h_11;
                                                         |     int32_t var_ch_10;
                                                         |     int16_t var_48h;
                                                         |     int16_t var_1040h_4;
                                                         |     int16_t var_4h_16;
                                                         |     int16_t var_1040h;
                                                         |     int16_t var_4h_2;
                                                         |     int32_t var_38h;
                                                         |     int32_t var_34h;
                                                         |     int32_t var_32h_2;
                                                         |     int32_t var_30h;
                                                         |     int32_t var_2eh_2;
                                                         |     int16_t var_4h_15;
                                                         |     int16_t var_40h;
                                                         |     char * var_8h_9;
                                                         |     int32_t var_ch_9;
                                                         |     int16_t var_10h_2;
                                                         |     int16_t var_1020h;
                                                         |     int16_t var_1ch;
                                                         |     int16_t var_0h;
                                                         |     int16_t var_4h;
                                                         |     int16_t var_ch_7;
                                                         |     int16_t var_8h_7;
                                                         |     int16_t var_4h_14;
                                                         |     int16_t var_18h;
                                                         |     char * s1;
                                                         |     int16_t var_ch_8;
                                                         |     int16_t var_1000h;
                                                         |     int16_t var_14h_2;
                                                         |     void * buf;
                                                         |     size_t size;
                                                         |     int16_t var_5ch;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
    0x00002f28 blmi 0xad57d8                             |     __asm ("blmi aav.0x00003f6a");
    0x00002f2c push.w {r4, r5, r6, r7, r8, sb, lr}       |     
    0x00002f30 mov r6, r1                                |     r6 = r1;
    0x00002f32 add r2, pc                                |     r2 += pc;
    0x00002f34 sub sp, 0x64                              |     
    0x00002f36 movs r1, 0                                |     r1 = 0;
    0x00002f38 mov r7, r0                                |     r7 = r0;
    0x00002f3a ldr r3, [r2, r3]                          |     r3 = *((r2 + r3));
    0x00002f3c ldr.w r8, [pc, 0x9c]                      |     
    0x00002f40 ldr r3, [r3]                              |     r3 = *(r3);
    0x00002f42 str r3, [sp, 0x5c]                        |     var_5ch = r3;
    0x00002f44 mov.w r3, 0                               |     r3 = 0;
    0x00002f48 blx 0x17d8                                |     r0 = open (r0, r1, r2);
    0x00002f4c subs r5, r0, 0                            |     r5 = r0 - 0;
    0x00002f4e add r8, pc                                |     r8 = 0x5f2e;
                                                         |     if (r5 >= r0) {
    0x00002f50 blt 0x2fa8                                |         
    0x00002f52 mov r1, sp                                |         r1 = sp;
    0x00002f54 blx 0x1994                                |         r0 = fstat (r0, r1);
    0x00002f58 cmp r0, 0                                 |         
                                                         |         if (r0 < 0) {
    0x00002f5a blt 0x2fa8                                |             goto label_6;
                                                         |         }
    0x00002f5c ldr.w sb, [sp, 0x2c]                      |         sb = size;
    0x00002f60 mov r0, sb                                |         r0 = sb;
    0x00002f62 blx 0x17c0                                |         r0 = malloc (r0);
    0x00002f66 mov r4, r0                                |         r4 = r0;
                                                         |         if (r0 == 0) {
    0x00002f68 cbz r0, 0x2fcc                            |             goto label_7;
                                                         |         }
    0x00002f6a mov r1, r0                                |         r1 = r0;
    0x00002f6c mov r2, sb                                |         r2 = sb;
    0x00002f6e mov r0, r5                                |         r0 = r5;
    0x00002f70 blx 0x16ac                                |         r0 = read (r0, r1, r2);
    0x00002f74 adds r3, r0, 1                            |         r3 = r0 + 1;
                                                         |         if (r3 == r0) {
    0x00002f76 beq 0x2fa8                                |             goto label_6;
                                                         |         }
    0x00002f78 ldr r3, [sp, 0x2c]                        |         r3 = size;
    0x00002f7a cmp r3, r0                                |         
                                                         |         if (r3 != r0) {
    0x00002f7c bne 0x2fb2                                |             goto label_8;
                                                         |         }
    0x00002f7e mov r0, r5                                |         r0 = r5;
    0x00002f80 blx 0x19a0                                |         r0 = close (r0);
    0x00002f84 cmp r0, 0                                 |         
                                                         |         if (r0 < 0) {
    0x00002f86 blt 0x2fa8                                |             goto label_6;
                                                         |         }
    0x00002f88 ldr r3, [sp, 0x2c]                        |         r3 = size;
    0x00002f8a ldr r2, [pc, 0x54]                        |         
    0x00002f8c str r3, [r6]                              |         *(r6) = r3;
    0x00002f8e ldr r3, [pc, 0x48]                        |         r3 = *(0x2fda);
    0x00002f90 add r2, pc                                |         r2 = 0x5f76;
    0x00002f92 ldr r3, [r2, r3]                          |         r3 = *(0x5f76);
    0x00002f94 ldr r2, [r3]                              |         r2 = *(0x5f76);
    0x00002f96 ldr r3, [sp, 0x5c]                        |         r3 = var_5ch;
    0x00002f98 eors r2, r3                               |         r2 ^= r3;
    0x00002f9a mov.w r3, 0                               |         r3 = 0;
                                                         |         if (r2 != r3) {
    0x00002f9e bne 0x2fae                                |             goto label_9;
                                                         |         }
    0x00002fa0 mov r0, r4                                |         r0 = r4;
    0x00002fa2 add sp, 0x64                              |         
    0x00002fa4 pop.w {r4, r5, r6, r7, r8, sb, pc}        |         
                                                         |     }
                                                         | label_6:
    0x00002fa8 mov r0, r7                                |     r0 = r7;
    0x00002faa bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_9:
    0x00002fae blx 0x1724                                |     stack_chk_fail ();
                                                         | label_8:
    0x00002fb2 ldr r0, [pc, 0x30]                        |     
    0x00002fb4 mov r3, r7                                |     r3 = r7;
    0x00002fb6 ldr r2, [pc, 0x30]                        |     
    0x00002fb8 movs r1, 1                                |     r1 = 1;
    0x00002fba ldr.w r0, [r8, r0]                        |     r0 = *((r8 + r0));
    0x00002fbe add r2, pc                                |     r2 = 0x5fac;
    0x00002fc0 ldr r0, [r0]                              |     r0 = *(0x2fe6);
    0x00002fc2 blx 0x18e0                                |     fprintf_chk ();
    0x00002fc6 movs r0, 1                                |     r0 = 1;
    0x00002fc8 blx 0x1808                                |     exit (r0);
                                                         | label_7:
    0x00002fcc ldr r0, [pc, 0x1c]                        |     
    0x00002fce add r0, pc                                |     r0 = 0x5fbe;
    0x00002fd0 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00002fd4 subs r7, 0x6a                             |     r7 -= 0x6a;
    0x00002fd6 movs r0, r0                               |     
    0x00002fd8 lsls r0, r0, 5                            |     r0 <<= 5;
    0x00002fda movs r0, r0                               |     
    0x00002fdc subs r7, 0x4e                             |     r7 -= 0x4e;
    0x00002fde movs r0, r0                               |     
    0x00002fe0 subs r7, 0xc                              |     r7 -= 0xc;
    0x00002fe2 movs r0, r0                               |     
    0x00002fe4 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x00002fe6 movs r0, r0                               |     
    0x00002fe8 adds r2, r5, r6                           |     r2 = r5 + r6;
    0x00002fea movs r0, r0                               |     
    0x00002fec adds r2, r2, r6                           |     r2 += r6;
    0x00002fee movs r0, r0                               |     
    0x00002ff0 ldr r2, [pc, 0xac]                        |     
    0x00002ff2 cmp r0, 4                                 |     
    0x00002ff4 ldr r3, [pc, 0xac]                        |     r3 = *(0x30a4);
    0x00002ff6 push {r7, lr}                             |     
    0x00002ff8 sub.w sp, sp, 0x1000                      |     
    0x00002ffc add r2, pc                                |     r2 = 0x60a0;
    0x00002ffe ldr r6, [pc, 0xa8]                        |     
    0x00003000 sub sp, 0x18                              |     
    0x00003002 ldr r3, [r2, r3]                          |     
    0x00003004 add.w r4, sp, 0x1000                      |     r4 += var_1000h;
    0x00003008 add r6, pc                                |     r6 = 0x60b6;
    0x0000300a add.w r4, r4, 0x14                        |     r4 += var_14h_2;
    0x0000300e ldr r3, [r3]                              |     r3 = *(0x60a0);
    0x00003010 str r3, [r4]                              |     *(r4) = r3;
    0x00003012 mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 <= 4) {
    0x00003016 bgt 0x301c                                |         
    0x00003018 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x0000301c add.w sb, sp, 0x18                        |     sb += var_18h;
    0x00003020 mov r4, r1                                |     r4 = r1;
    0x00003022 sub.w r8, sb, 4                           |     r8 -= var_4h_14;
    0x00003026 add.w r0, r4, 0x14                        |     r0 = r4 + 0x14;
    0x0000302a mov r1, r8                                |     r1 = r8;
    0x0000302c bl 0x2e7c                                 |     fcn_00002e7c (r0, r1);
    0x00003030 ldr r0, [r4, 4]                           |     r0 = *((r4 + 4));
    0x00003032 bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003036 ldr r1, [pc, 0x74]                        |     
    0x00003038 mov r7, r0                                |     r7 = r0;
    0x0000303a ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x0000303c add r1, pc                                |     r1 = 0x60ee;
    0x0000303e blx 0x1688                                |     r0 = strcmp (r0, r1);
    0x00003042 mov r5, r0                                |     r5 = r0;
                                                         |     if (r0 != 0) {
    0x00003044 cbz r0, 0x305e                            |         
    0x00003046 ldr r3, [pc, 0x68]                        |         
    0x00003048 movs r2, 0x26                             |         r2 = 0x26;
    0x0000304a ldr r0, [pc, 0x68]                        |         
    0x0000304c movs r1, 1                                |         r1 = 1;
    0x0000304e ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x00003050 add r0, pc                                |         r0 = 0x610a;
    0x00003052 ldr r3, [r3]                              |         r3 = *(0x30b2);
    0x00003054 blx 0x1760                                |         fwrite (r0, r1, r2, r3);
    0x00003058 movs r0, 2                                |         r0 = 2;
    0x0000305a blx 0x1808                                |         exit (r0);
                                                         |     }
    0x0000305e ldr r0, [r4, 0xc]                         |     r0 = *((r4 + 0xc));
    0x00003060 sub.w r1, sb, 0xc                         |     r1 -= var_ch_7;
    0x00003064 bl 0x2f28                                 |     fcn_00002f28 (r0, r1);
    0x00003068 sub.w r1, sb, 8                           |     r1 -= var_8h_7;
    0x0000306c mov r2, r0                                |     r2 = r0;
    0x0000306e ldr r0, [r4, 0x10]                        |     r0 = *((r4 + 0x10));
    0x00003070 mov r4, r2                                |     r4 = r2;
    0x00003072 bl 0x2f28                                 |     fcn_00002f28 (r0, r1);
    0x00003076 str r0, [sp]                              |     *(sp) = r0;
    0x00003078 mov r2, r4                                |     r2 = r4;
    0x0000307a ldr r3, [sb, -0x8]                        |     r3 = *((sb - 0x8));
    0x0000307e mov r1, r8                                |     r1 = r8;
    0x00003080 mov r0, r7                                |     r0 = r7;
    0x00003082 str r3, [sp, 4]                           |     var_4h = r3;
    0x00003084 ldr r3, [sb, -0xc]                        |     r3 = var_ch_7;
    0x00003088 blx 0x18d4                                |     r0 = keyctl_pkey_verify ();
    0x0000308c cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x0000308e blt 0x3096                                |         
    0x00003090 mov r0, r5                                |         r0 = r5;
    0x00003092 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x00003096 ldr r0, [pc, 0x20]                        |     
    0x00003098 add r0, pc                                |     r0 = 0x6156;
    0x0000309a bl 0x1e40                                 |     fcn_00001e40 ();
    0x0000309e nop                                       |     
    0x000030a0 subs r6, 0xa0                             |     r6 -= 0xa0;
    0x000030a2 movs r0, r0                               |     
    0x000030a4 lsls r0, r0, 5                            |     r0 <<= 5;
    0x000030a6 movs r0, r0                               |     
    0x000030a8 subs r6, 0x94                             |     r6 -= 0x94;
    0x000030aa movs r0, r0                               |     
    0x000030ac adds r4, r7, r4                           |     r4 = r7 + r4;
    0x000030ae movs r0, r0                               |     
    0x000030b0 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x000030b2 movs r0, r0                               |     
    0x000030b4 adds r4, r5, r4                           |     r4 = r5 + r4;
    0x000030b6 movs r0, r0                               |     
    0x000030b8 adds r4, r1, r4                           |     r4 = r1 + r4;
    0x000030ba movs r0, r0                               |     
    0x000030bc ldr r2, [pc, 0x128]                       |     
    0x000030be cmp r0, 2                                 |     
    0x000030c0 ldr r3, [pc, 0x128]                       |     r3 = *(0x31ec);
    0x000030c2 push {r7, lr}                             |     
    0x000030c4 sub.w sp, sp, 0x1040                      |     
    0x000030c8 add r2, pc                                |     r2 = 0x62b4;
    0x000030ca ldr r6, [pc, 0x124]                       |     
    0x000030cc add.w r4, sp, 0x1020                      |     r4 += var_1020h;
    0x000030d0 ldr r3, [r2, r3]                          |     
    0x000030d2 add.w r4, r4, 0x1c                        |     r4 += var_1ch;
    0x000030d6 add r6, pc                                |     r6 = 0x62cc;
    0x000030d8 ldr r3, [r3]                              |     r3 = *(0x62b4);
    0x000030da str r3, [r4]                              |     *(r4) = r3;
    0x000030dc mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 <= 2) {
    0x000030e0 bgt 0x30e6                                |         
    0x000030e2 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x000030e6 add r5, sp, 0x40                          |     r5 += var_40h;
    0x000030e8 mov r4, r1                                |     r4 = r1;
    0x000030ea sub.w r8, r5, 4                           |     r8 -= var_4h_15;
    0x000030ee add.w r0, r4, 0xc                         |     r0 += var_ch_8;
    0x000030f0 movs r4, r1                               |     r4 = r1;
    0x000030f2 mov r1, r8                                |     r1 = r8;
    0x000030f4 bl 0x2e7c                                 |     fcn_00002e7c (r0, r1);
    0x000030f6 cdp2 p8, 0xc, c6, c2, c0, 3               |     __asm ("cdp2 p8, 0xc, c6, c2, c0, 3");
    0x000030fa bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x000030fe ldr r1, [pc, 0xf4]                        |     
    0x00003100 mov r7, r0                                |     r7 = r0;
    0x00003102 ldr r0, [r4, 8]                           |     r0 = s1;
    0x00003104 add r1, pc                                |     r1 = 0x62fe;
    0x00003106 blx 0x1688                                |     r0 = strcmp (r0, r1);
    0x0000310a mov r4, r0                                |     r4 = r0;
                                                         |     if (r0 != 0) {
    0x0000310c cbz r0, 0x3126                            |         
    0x0000310e ldr r3, [pc, 0xe8]                        |         
    0x00003110 movs r2, 0x26                             |         r2 = 0x26;
    0x00003112 ldr r0, [pc, 0xe8]                        |         
    0x00003114 movs r1, 1                                |         r1 = 1;
    0x00003116 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x00003118 add r0, pc                                |         r0 = 0x631a;
    0x0000311a ldr r3, [r3]                              |         r3 = *(0x31fa);
    0x0000311c blx 0x1760                                |         fwrite (r0, r1, r2, r3);
    0x00003120 movs r0, 2                                |         r0 = 2;
    0x00003122 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x00003126 add r2, sp, 4                             |     r2 += var_4h_2;
    0x00003128 mov r1, r8                                |     r1 = r8;
    0x0000312a mov r0, r7                                |     r0 = r7;
    0x0000312c blx 0x19c4                                |     r0 = keyctl_pkey_query ();
    0x00003130 cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x00003132 blt 0x31e0                                |         
    0x00003134 ldr r1, [pc, 0xc8]                        |         
    0x00003136 movs r0, 1                                |         r0 = 1;
    0x00003138 ldr r2, [r5, -0x38]                       |         r2 = var_38h;
    0x0000313c add r1, pc                                |         r1 = 0x6340;
    0x0000313e blx 0x18bc                                |         printf_chk ();
    0x00003142 ldr r1, [pc, 0xc0]                        |         
    0x00003144 movs r0, 1                                |         r0 = 1;
    0x00003146 ldrh r2, [r5, -0x34]                      |         r2 = var_34h;
    0x0000314a add r1, pc                                |         r1 = 0x6354;
    0x0000314c blx 0x18bc                                |         printf_chk ();
    0x00003150 ldr r1, [pc, 0xb4]                        |         
    0x00003152 movs r0, 1                                |         r0 = 1;
    0x00003154 ldrh r2, [r5, -0x32]                      |         r2 = var_32h_2;
    0x00003158 add r1, pc                                |         r1 = 0x6364;
    0x0000315a blx 0x18bc                                |         printf_chk ();
    0x0000315e ldr r1, [pc, 0xac]                        |         
    0x00003160 movs r0, 1                                |         r0 = 1;
    0x00003162 ldrh r2, [r5, -0x30]                      |         r2 = var_30h;
    0x00003166 add r1, pc                                |         r1 = 0x6378;
    0x00003168 blx 0x18bc                                |         printf_chk ();
    0x0000316c ldr r1, [pc, 0xa0]                        |         
    0x0000316e movs r0, 1                                |         r0 = 1;
    0x00003170 ldrh r2, [r5, -0x2e]                      |         r2 = var_2eh_2;
    0x00003174 add r1, pc                                |         r1 = 0x6388;
    0x00003176 blx 0x18bc                                |         printf_chk ();
    0x00003178 sub.w r8, r2, r5, lsr 29                  |         r8 = r2 - (r5 >> 29);
    0x0000317c subs r4, 0x3c                             |         r4 -= 0x3c;
    0x0000317e movs r0, 1                                |         r0 = 1;
    0x00003180 ldr r1, [pc, 0x90]                        |         
    0x00003182 tst.w r3, 1                               |         
    0x00003186 ite eq                                    |         
                                                         |         if ((r3 & 1) != 0) {
    0x00003188 moveq r2, 0x6e                            |             r2 = 0x6e;
                                                         |         }
                                                         |         if ((r3 & 1) == 0) {
    0x0000318a movne r2, 0x79                            |             r2 = 0x79;
                                                         |         }
    0x0000318c add r1, pc                                |         r1 = 0x63a4;
    0x0000318e blx 0x18bc                                |         printf_chk ();
    0x00003192 ldr r3, [r5, -0x3c]                       |         r3 = var_4h_2;
    0x00003196 movs r0, 1                                |         r0 = 1;
    0x00003198 ldr r1, [pc, 0x7c]                        |         
    0x0000319a tst.w r3, 2                               |         
    0x0000319e ite eq                                    |         
                                                         |         if ((r3 & 2) != 0) {
    0x000031a0 moveq r2, 0x6e                            |             r2 = 0x6e;
                                                         |         }
                                                         |         if ((r3 & 2) == 0) {
    0x000031a2 movne r2, 0x79                            |             r2 = 0x79;
                                                         |         }
    0x000031a4 add r1, pc                                |         r1 = 0x63c0;
    0x000031a6 blx 0x18bc                                |         printf_chk ();
    0x000031aa ldr r3, [r5, -0x3c]                       |         r3 = var_4h_2;
    0x000031ae movs r0, 1                                |         r0 = 1;
    0x000031b0 ldr r1, [pc, 0x68]                        |         
    0x000031b2 tst.w r3, 4                               |         
    0x000031b6 ite eq                                    |         
                                                         |         if ((r3 & 4) != 0) {
    0x000031b8 moveq r2, 0x6e                            |             r2 = 0x6e;
                                                         |         }
                                                         |         if ((r3 & 4) == 0) {
    0x000031ba movne r2, 0x79                            |             r2 = 0x79;
                                                         |         }
    0x000031bc add r1, pc                                |         r1 = 0x63dc;
    0x000031be blx 0x18bc                                |         printf_chk ();
    0x000031c2 ldr r3, [r5, -0x3c]                       |         r3 = var_4h_2;
    0x000031c6 movs r0, 1                                |         r0 = 1;
    0x000031c8 ldr r1, [pc, 0x54]                        |         
    0x000031ca tst.w r3, 8                               |         
    0x000031ce add r1, pc                                |         r1 = 0x63f2;
    0x000031d0 ite eq                                    |         
                                                         |         if ((r3 & 8) != 0) {
    0x000031d2 moveq r2, 0x6e                            |             r2 = 0x6e;
                                                         |         }
                                                         |         if ((r3 & 8) == 0) {
    0x000031d4 movne r2, 0x79                            |             r2 = 0x79;
                                                         |         }
    0x000031d6 blx 0x18bc                                |         printf_chk ();
    0x000031da mov r0, r4                                |         r0 = r4;
    0x000031dc blx 0x1808                                |         exit (r0);
                                                         |     }
    0x000031e0 ldr r0, [pc, 0x40]                        |     
    0x000031e2 add r0, pc                                |     r0 = 0x640a;
    0x000031e4 bl 0x1e40                                 |     fcn_00001e40 ();
    0x000031e8 subs r5, 0xd4                             |     r5 -= 0xd4;
    0x000031ea movs r0, r0                               |     
    0x000031ec lsls r0, r0, 5                            |     r0 <<= 5;
    0x000031ee movs r0, r0                               |     
    0x000031f0 subs r5, 0xc6                             |     r5 -= 0xc6;
    0x000031f2 movs r0, r0                               |     
    0x000031f4 adds r4, r6, r1                           |     r4 = r6 + r1;
    0x000031f6 movs r0, r0                               |     
    0x000031f8 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x000031fa movs r0, r0                               |     
    0x000031fc adds r4, r4, r1                           |     r4 += r1;
    0x000031fe movs r0, r0                               |     
    0x00003200 adds r0, r2, r2                           |     r0 = r2 + r2;
    0x00003202 movs r0, r0                               |     
    0x00003204 adds r2, r2, r2                           |     r2 += r2;
    0x00003206 movs r0, r0                               |     
    0x00003208 adds r0, r3, r2                           |     r0 = r3 + r2;
    0x0000320a movs r0, r0                               |     
    0x0000320c adds r6, r3, r2                           |     r6 = r3 + r2;
    0x0000320e movs r0, r0                               |     
    0x00003210 adds r4, r4, r2                           |     r4 += r2;
    0x00003212 movs r0, r0                               |     
    0x00003214 adds r0, r4, r2                           |     r0 = r4 + r2;
    0x00003216 movs r0, r0                               |     
    0x00003218 adds r4, r2, r2                           |     r4 = r2 + r2;
    0x0000321a movs r0, r0                               |     
    0x0000321c adds r0, r1, r2                           |     r0 = r1 + r2;
    0x0000321e movs r0, r0                               |     
    0x00003220 adds r2, r0, r2                           |     r2 = r0 + r2;
    0x00003222 movs r0, r0                               |     
    0x00003224 asrs r6, r2, 0x1f                         |     r6 = r2 >> 0x1f;
    0x00003226 movs r0, r0                               |     
    0x00003228 ldr r2, [pc, 0xe4]                        |     
    0x0000322a cmp r0, 3                                 |     
    0x0000322c ldr r3, [pc, 0xe4]                        |     r3 = *(0x3314);
    0x0000322e push.w {r7, fp, lr}                       |     
    0x00003232 sub.w sp, sp, 0x1040                      |     
    0x00003236 add r2, pc                                |     r2 = 0x654a;
    0x00003238 ldr r6, [pc, 0xdc]                        |     
    0x0000323a sub sp, 0xc                               |     
    0x0000323c ldr r3, [r2, r3]                          |     
    0x0000323e add.w r4, sp, 0x1040                      |     r4 += var_1040h;
    0x00003242 add r6, pc                                |     r6 = 0x655e;
    0x00003244 add.w r4, r4, 4                           |     r4 += var_4h_16;
    0x00003248 ldr r3, [r3]                              |     r3 = *(0x654a);
    0x0000324a str r3, [r4]                              |     *(r4) = r3;
    0x0000324c mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 <= 3) {
    0x00003250 bgt 0x3256                                |         
    0x00003252 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x00003256 add.w sb, sp, 0x48                        |     sb += var_48h;
    0x0000325a mov r4, r1                                |     r4 = r1;
    0x0000325c sub.w r8, sb, 4                           |     r8 -= var_4h_17;
    0x00003260 add.w r0, r4, 0x10                        |     r0 += var_10h_2;
    0x00003264 mov r1, r8                                |     r1 = r8;
    0x00003266 bl 0x2e7c                                 |     fcn_00002e7c (r0, r1);
    0x0000326a ldr r0, [r4, 4]                           |     r0 = var_40h;
    0x0000326c bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003270 ldr r1, [pc, 0xa8]                        |     
    0x00003272 mov r7, r0                                |     r7 = r0;
    0x00003274 ldr r0, [r4, 8]                           |     r0 = var_8h_9;
    0x00003276 add r1, pc                                |     r1 = 0x6596;
    0x00003278 blx 0x1688                                |     r0 = strcmp (r0, r1);
    0x0000327c mov r5, r0                                |     r5 = r0;
                                                         |     if (r0 != 0) {
    0x0000327e cbz r0, 0x3298                            |         
    0x00003280 ldr r3, [pc, 0x9c]                        |         
    0x00003282 movs r2, 0x26                             |         r2 = 0x26;
    0x00003284 ldr r0, [pc, 0x9c]                        |         
    0x00003286 movs r1, 1                                |         r1 = 1;
    0x00003288 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x0000328a add r0, pc                                |         r0 = 0x65b2;
    0x0000328c ldr r3, [r3]                              |         r3 = *(0x3320);
    0x0000328e blx 0x1760                                |         fwrite (r0, r1, r2, r3);
    0x00003292 movs r0, 2                                |         r0 = 2;
    0x00003294 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x00003298 add r1, sp, 8                             |     r1 += var_8h;
    0x0000329a ldr r0, [r4, 0xc]                         |     r0 = var_ch_9;
    0x0000329c bl 0x2f28                                 |     fcn_00002f28 (r0, r1);
    0x000032a0 add r2, sp, 0xc                           |     r2 += var_ch;
    0x000032a2 mov sl, r0                                |     sl = r0;
    0x000032a4 mov r1, r8                                |     r1 = r8;
    0x000032a6 mov r0, r7                                |     r0 = r7;
    0x000032a8 blx 0x19c4                                |     keyctl_pkey_query ();
    0x000032aa invalid                                   |     
                                                         |     if (r0 >= 2) {
    0x000032ae blt 0x32f0                                |         
    0x000032b0 ldrh fp, [sb, -0x32]                      |         fp = var_32h;
    0x000032b4 mov r0, fp                                |         r0 = fp;
    0x000032b6 blx 0x17c0                                |         r0 = malloc (r0);
    0x000032ba mov r4, r0                                |         r4 = r0;
                                                         |         if (r0 == 0) {
    0x000032bc cbz r0, 0x3306                            |             goto label_10;
                                                         |         }
    0x000032be mov r1, r8                                |         r1 = r8;
    0x000032c0 str.w fp, [sp, 4]                         |         __asm ("str.w fp, [var_4h_13]");
    0x000032c4 mov r2, sl                                |         r2 = sl;
    0x000032c6 ldr r3, [sb, -0x40]                       |         r3 = var_8h_10;
    0x000032ca mov r0, r7                                |         r0 = r7;
    0x000032cc str r4, [sp]                              |         *(sp) = r4;
    0x000032ce blx 0x1664                                |         r0 = keyctl_pkey_sign ();
    0x000032d2 subs r1, r0, 0                            |         r1 = r0 - 0;
                                                         |         if (r1 < r0) {
    0x000032d4 blt 0x32f8                                |             goto label_11;
                                                         |         }
    0x000032d6 ldr r3, [pc, 0x50]                        |         
    0x000032d8 mov r0, r4                                |         r0 = r4;
    0x000032da movs r2, 1                                |         r2 = 1;
    0x000032dc ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x000032de ldr r3, [r3]                              |         r3 = *(0x332a);
    0x000032e0 blx 0x1760                                |         r0 = fwrite (r0, r1, r2, r3);
    0x000032e4 cmp r0, 1                                 |         
                                                         |         if (r0 == 1) {
    0x000032e6 beq 0x3300                                |             goto label_12;
                                                         |         }
    0x000032e8 ldr r0, [pc, 0x40]                        |         
    0x000032ea add r0, pc                                |         r0 = 0x661a;
    0x000032ec bl 0x1e40                                 |         fcn_00001e40 ();
                                                         |     }
    0x000032f0 ldr r0, [pc, 0x3c]                        |     
    0x000032f2 add r0, pc                                |     r0 = 0x6626;
    0x000032f4 bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_11:
    0x000032f8 ldr r0, [pc, 0x38]                        |     
    0x000032fa add r0, pc                                |     r0 = 0x6632;
    0x000032fc bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_12:
    0x00003300 mov r0, r5                                |     r0 = r5;
    0x00003302 blx 0x1808                                |     exit (r0);
                                                         | label_10:
    0x00003306 ldr r0, [pc, 0x30]                        |     
    0x00003308 add r0, pc                                |     r0 = 0x6646;
    0x0000330a bl 0x1e40                                 |     fcn_00001e40 ();
    0x0000330e nop                                       |     
    0x00003310 subs r4, 0x66                             |     r4 -= 0x66;
    0x00003312 movs r0, r0                               |     
    0x00003314 lsls r0, r0, 5                            |     r0 <<= 5;
    0x00003316 movs r0, r0                               |     
    0x00003318 subs r4, 0x5a                             |     r4 -= 0x5a;
    0x0000331a movs r0, r0                               |     
    0x0000331c asrs r2, r0, 0x1c                         |     r2 = r0 >> 0x1c;
    0x0000331e movs r0, r0                               |     
    0x00003320 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x00003322 movs r0, r0                               |     
    0x00003324 asrs r2, r6, 0x1b                         |     r2 = r6 >> 0x1b;
    0x00003326 movs r0, r0                               |     
    0x00003328 lsls r0, r2, 5                            |     r0 = r2 << 5;
    0x0000332a movs r0, r0                               |     
    0x0000332c asrs r6, r0, 0x1e                         |     r6 = r0 >> 0x1e;
    0x0000332e movs r0, r0                               |     
    0x00003330 asrs r6, r0, 0x1b                         |     r6 = r0 >> 0x1b;
    0x00003332 movs r0, r0                               |     
    0x00003334 asrs r2, r4, 0x1d                         |     r2 = r4 >> 0x1d;
    0x00003336 movs r0, r0                               |     
    0x00003338 asrs r0, r3, 0x19                         |     r0 = r3 >> 0x19;
    0x0000333a movs r0, r0                               |     
    0x0000333c ldr r2, [pc, 0xe4]                        |     
    0x0000333e cmp r0, 3                                 |     
    0x00003340 ldr r3, [pc, 0xe4]                        |     r3 = *(0x3428);
    0x00003342 push.w {r7, fp, lr}                       |     
    0x00003346 sub.w sp, sp, 0x1040                      |     
    0x0000334a add r2, pc                                |     r2 = 0x6772;
    0x0000334c ldr r6, [pc, 0xdc]                        |     
    0x0000334e sub sp, 0xc                               |     
    0x00003350 ldr r3, [r2, r3]                          |     
    0x00003352 add.w r4, sp, 0x1040                      |     r4 += var_1040h_2;
    0x00003356 add r6, pc                                |     r6 = 0x6786;
    0x00003358 add.w r4, r4, 4                           |     r4 += var_4h_18;
    0x0000335c ldr r3, [r3]                              |     r3 = *(0x6772);
    0x0000335e str r3, [r4]                              |     *(r4) = r3;
    0x00003360 mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 <= 3) {
    0x00003364 bgt 0x336a                                |         
    0x00003366 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x0000336a add.w sb, sp, 0x48                        |     sb += var_48h_2;
    0x0000336e mov r4, r1                                |     r4 = r1;
    0x00003370 sub.w r8, sb, 4                           |     r8 -= var_4h_19;
    0x00003374 add.w r0, r4, 0x10                        |     r0 += var_48h;
    0x00003378 mov r1, r8                                |     r1 = r8;
    0x0000337a bl 0x2e7c                                 |     fcn_00002e7c (r0, r1);
    0x0000337e ldr r0, [r4, 4]                           |     r0 = var_48h_4;
    0x00003380 bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003384 ldr r1, [pc, 0xa8]                        |     
    0x00003386 mov r7, r0                                |     r7 = r0;
    0x00003388 ldr r0, [r4, 8]                           |     r0 = var_8h_11;
    0x0000338a add r1, pc                                |     r1 = 0x67be;
    0x0000338c blx 0x1688                                |     r0 = strcmp (r0, r1);
    0x00003390 mov r5, r0                                |     r5 = r0;
                                                         |     if (r0 != 0) {
    0x00003392 cbz r0, 0x33ac                            |         
    0x00003394 ldr r3, [pc, 0x9c]                        |         
    0x00003396 movs r2, 0x26                             |         r2 = 0x26;
    0x00003398 ldr r0, [pc, 0x9c]                        |         
    0x0000339a movs r1, 1                                |         r1 = 1;
    0x0000339c ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x0000339e add r0, pc                                |         r0 = 0x67da;
    0x000033a0 ldr r3, [r3]                              |         r3 = *(0x3434);
    0x000033a2 blx 0x1760                                |         fwrite (r0, r1, r2, r3);
    0x000033a6 movs r0, 2                                |         r0 = 2;
    0x000033a8 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x000033ac add r1, sp, 8                             |     r1 += var_8h_2;
    0x000033ae ldr r0, [r4, 0xc]                         |     r0 = var_ch_10;
    0x000033b0 bl 0x2f28                                 |     fcn_00002f28 (r0, r1);
    0x000033b4 add r2, sp, 0xc                           |     r2 += var_ch_2;
    0x000033b6 mov sl, r0                                |     sl = r0;
    0x000033b8 mov r1, r8                                |     r1 = r8;
    0x000033ba mov r0, r7                                |     r0 = r7;
    0x000033bc blx 0x19c4                                |     r0 = keyctl_pkey_query ();
    0x000033c0 cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x000033c2 blt 0x3404                                |         
    0x000033c4 ldrh fp, [sb, -0x30]                      |         fp = var_0h_14;
    0x000033c8 mov r0, fp                                |         r0 = fp;
    0x000033ca blx 0x17c0                                |         r0 = malloc (r0);
    0x000033ce mov r4, r0                                |         r4 = r0;
                                                         |         if (r0 == 0) {
    0x000033d0 cbz r0, 0x341a                            |             goto label_13;
                                                         |         }
    0x000033d2 mov r1, r8                                |         r1 = r8;
    0x000033d4 str.w fp, [sp, 4]                         |         __asm ("str.w fp, [var_4h_12]");
    0x000033d8 mov r2, sl                                |         r2 = sl;
    0x000033da ldr r3, [sb, -0x40]                       |         r3 = var_8h_12;
    0x000033de mov r0, r7                                |         r0 = r7;
    0x000033e0 str r4, [sp]                              |         *(sp) = r4;
    0x000033e2 blx 0x18f8                                |         r0 = keyctl_pkey_decrypt ();
    0x000033e6 subs r1, r0, 0                            |         r1 = r0 - 0;
                                                         |         if (r1 < r0) {
    0x000033e8 blt 0x340c                                |             goto label_14;
                                                         |         }
    0x000033ea ldr r3, [pc, 0x50]                        |         
    0x000033ec mov r0, r4                                |         r0 = r4;
    0x000033ee movs r2, 1                                |         r2 = 1;
    0x000033f0 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x000033f2 ldr r3, [r3]                              |         r3 = *(0x343e);
    0x000033f4 blx 0x1760                                |         r0 = fwrite (r0, r1, r2, r3);
    0x000033f8 cmp r0, 1                                 |         
                                                         |         if (r0 == 1) {
    0x000033fa beq 0x3414                                |             goto label_15;
                                                         |         }
    0x000033fc ldr r0, [pc, 0x40]                        |         
    0x000033fe add r0, pc                                |         r0 = 0x6842;
    0x00003400 bl 0x1e40                                 |         fcn_00001e40 ();
                                                         |     }
    0x00003404 ldr r0, [pc, 0x3c]                        |     
    0x00003406 add r0, pc                                |     r0 = 0x684e;
    0x00003408 bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_14:
    0x0000340c ldr r0, [pc, 0x38]                        |     
    0x0000340e add r0, pc                                |     r0 = 0x685a;
    0x00003410 bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_15:
    0x00003414 mov r0, r5                                |     r0 = r5;
    0x00003416 blx 0x1808                                |     exit (r0);
                                                         | label_13:
    0x0000341a ldr r0, [pc, 0x30]                        |     
    0x0000341c add r0, pc                                |     r0 = 0x686e;
    0x0000341e bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003422 nop                                       |     
    0x00003424 subs r3, 0x52                             |     r3 -= 0x52;
    0x00003426 movs r0, r0                               |     
    0x00003428 lsls r0, r0, 5                            |     r0 <<= 5;
    0x0000342a movs r0, r0                               |     
    0x0000342c subs r3, 0x46                             |     r3 -= 0x46;
    0x0000342e movs r0, r0                               |     
    0x00003430 asrs r6, r5, 0x17                         |     r6 = r5 >> 0x17;
    0x00003432 movs r0, r0                               |     
    0x00003434 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x00003436 movs r0, r0                               |     
    0x00003438 asrs r6, r3, 0x17                         |     r6 = r3 >> 0x17;
    0x0000343a movs r0, r0                               |     
    0x0000343c lsls r0, r2, 5                            |     r0 = r2 << 5;
    0x0000343e movs r0, r0                               |     
    0x00003440 asrs r2, r6, 0x19                         |     r2 = r6 >> 0x19;
    0x00003442 movs r0, r0                               |     
    0x00003444 asrs r2, r6, 0x16                         |     r2 = r6 >> 0x16;
    0x00003446 movs r0, r0                               |     
    0x00003448 asrs r2, r5, 0x19                         |     r2 = r5 >> 0x19;
    0x0000344a movs r0, r0                               |     
    0x0000344c asrs r4, r0, 0x15                         |     r4 = r0 >> 0x15;
    0x0000344e movs r0, r0                               |     
    0x00003450 ldr r2, [pc, 0xe4]                        |     
    0x00003452 cmp r0, 3                                 |     
    0x00003454 ldr r3, [pc, 0xe4]                        |     r3 = *(0x353c);
    0x00003456 push.w {r7, fp, lr}                       |     
    0x0000345a sub.w sp, sp, 0x1040                      |     
    0x0000345e add r2, pc                                |     r2 = 0x699a;
    0x00003460 ldr r6, [pc, 0xdc]                        |     
    0x00003462 sub sp, 0xc                               |     
    0x00003464 ldr r3, [r2, r3]                          |     
    0x00003466 add.w r4, sp, 0x1040                      |     r4 += var_1040h_3;
    0x0000346a add r6, pc                                |     r6 = 0x69ae;
    0x0000346c add.w r4, r4, 4                           |     r4 += var_4h_20;
    0x00003470 ldr r3, [r3]                              |     r3 = *(0x699a);
    0x00003472 str r3, [r4]                              |     *(r4) = r3;
    0x00003474 mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 <= 3) {
    0x00003478 bgt 0x347e                                |         
    0x0000347a bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x0000347e add.w sb, sp, 0x48                        |     sb += var_48h_3;
    0x00003482 mov r4, r1                                |     r4 = r1;
    0x00003484 sub.w r8, sb, 4                           |     r8 -= var_4h_21;
    0x00003488 add.w r0, r4, 0x10                        |     r0 += var_10h_3;
    0x0000348c mov r1, r8                                |     r1 = r8;
    0x0000348e bl 0x2e7c                                 |     fcn_00002e7c (r0, r1);
    0x00003492 ldr r0, [r4, 4]                           |     r0 = var_48h_5;
    0x00003494 bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003498 ldr r1, [pc, 0xa8]                        |     
    0x0000349a mov r7, r0                                |     r7 = r0;
    0x0000349c ldr r0, [r4, 8]                           |     r0 = var_8h_13;
    0x0000349e add r1, pc                                |     r1 = 0x69e6;
    0x000034a0 blx 0x1688                                |     r0 = strcmp (r0, r1);
    0x000034a4 mov r5, r0                                |     r5 = r0;
                                                         |     if (r0 != 0) {
    0x000034a6 cbz r0, 0x34c0                            |         
    0x000034a8 ldr r3, [pc, 0x9c]                        |         
    0x000034aa movs r2, 0x26                             |         r2 = 0x26;
    0x000034ac ldr r0, [pc, 0x9c]                        |         
    0x000034ae movs r1, 1                                |         r1 = 1;
    0x000034b0 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x000034b2 add r0, pc                                |         r0 = 0x6a02;
    0x000034b4 ldr r3, [r3]                              |         r3 = *(0x3548);
    0x000034b6 blx 0x1760                                |         r0 = fwrite (r0, r1, r2, r3);
    0x000034b8 ldrd r2, r0, [r4, -0x8]                   |         __asm ("ldrd r2, r0, [r4, -0x8]");
    0x000034bc blx 0x1808                                |         exit (r0);
    0x000034be invalid                                   |         
                                                         |     }
    0x000034c0 add r1, sp, 8                             |     r1 += var_8h_3;
    0x000034c2 ldr r0, [r4, 0xc]                         |     r0 = var_ch_11;
    0x000034c4 bl 0x2f28                                 |     fcn_00002f28 (r0, r1);
    0x000034c8 add r2, sp, 0xc                           |     r2 += var_ch_3;
    0x000034ca mov sl, r0                                |     sl = r0;
    0x000034cc mov r1, r8                                |     r1 = r8;
    0x000034ce mov r0, r7                                |     r0 = r7;
    0x000034d0 blx 0x19c4                                |     r0 = keyctl_pkey_query ();
    0x000034d4 cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x000034d6 blt 0x3518                                |         
    0x000034d8 ldrh fp, [sb, -0x2e]                      |         fp = var_2eh;
    0x000034dc mov r0, fp                                |         r0 = fp;
    0x000034de blx 0x17c0                                |         r0 = malloc (r0);
    0x000034e2 mov r4, r0                                |         r4 = r0;
                                                         |         if (r0 == 0) {
    0x000034e4 cbz r0, 0x352e                            |             goto label_16;
                                                         |         }
    0x000034e6 mov r1, r8                                |         r1 = r8;
    0x000034e8 str.w fp, [sp, 4]                         |         __asm ("str.w fp, [var_0h_2]");
    0x000034ec mov r2, sl                                |         r2 = sl;
    0x000034ee ldr r3, [sb, -0x40]                       |         r3 = var_4h_4;
    0x000034f2 mov r0, r7                                |         r0 = r7;
    0x000034f4 str r4, [sp]                              |         *(sp) = r4;
    0x000034f6 blx 0x1730                                |         r0 = keyctl_pkey_encrypt ();
    0x000034fa subs r1, r0, 0                            |         r1 = r0 - 0;
                                                         |         if (r1 < r0) {
    0x000034fc blt 0x3520                                |             goto label_17;
                                                         |         }
    0x000034fe ldr r3, [pc, 0x50]                        |         
    0x00003500 mov r0, r4                                |         r0 = r4;
    0x00003502 movs r2, 1                                |         r2 = 1;
    0x00003504 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x00003506 ldr r3, [r3]                              |         r3 = *(0x3552);
    0x00003508 blx 0x1760                                |         r0 = fwrite (r0, r1, r2, r3);
    0x0000350c cmp r0, 1                                 |         
                                                         |         if (r0 == 1) {
    0x0000350e beq 0x3528                                |             goto label_18;
                                                         |         }
    0x00003510 ldr r0, [pc, 0x40]                        |         
    0x00003512 add r0, pc                                |         r0 = 0x6a6a;
    0x00003514 bl 0x1e40                                 |         fcn_00001e40 ();
    0x00003516 invalid                                   |         
                                                         |     }
    0x00003518 ldr r0, [pc, 0x3c]                        |     
    0x0000351a add r0, pc                                |     r0 = 0x6a76;
    0x0000351c bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_17:
    0x00003520 ldr r0, [pc, 0x38]                        |     
    0x00003522 add r0, pc                                |     r0 = 0x6a82;
    0x00003524 bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_18:
    0x00003528 mov r0, r5                                |     r0 = r5;
    0x0000352a blx 0x1808                                |     exit (r0);
                                                         | label_16:
    0x0000352e ldr r0, [pc, 0x30]                        |     
    0x00003530 add r0, pc                                |     r0 = 0x6a96;
    0x00003532 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003536 nop                                       |     
    0x00003538 subs r2, 0x3e                             |     r2 -= 0x3e;
    0x0000353a movs r0, r0                               |     
    0x0000353c lsls r0, r0, 5                            |     r0 <<= 5;
    0x0000353e movs r0, r0                               |     
    0x00003540 subs r2, 0x32                             |     r2 -= 0x32;
    0x00003542 movs r0, r0                               |     
    0x00003544 asrs r2, r3, 0x13                         |     r2 = r3 >> 0x13;
    0x00003546 movs r0, r0                               |     
    0x00003548 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x0000354a movs r0, r0                               |     
    0x0000354c asrs r2, r1, 0x13                         |     r2 = r1 >> 0x13;
    0x0000354e movs r0, r0                               |     
    0x00003550 lsls r0, r2, 5                            |     r0 = r2 << 5;
    0x00003552 movs r0, r0                               |     
    0x00003554 asrs r6, r3, 0x15                         |     r6 = r3 >> 0x15;
    0x00003556 movs r0, r0                               |     
    0x00003558 asrs r6, r3, 0x12                         |     r6 = r3 >> 0x12;
    0x0000355a movs r0, r0                               |     
    0x0000355c asrs r2, r5, 0x15                         |     r2 = r5 >> 0x15;
    0x0000355e movs r0, r0                               |     
    0x00003560 asrs r0, r6, 0x10                         |     r0 = r6 >> 0x10;
    0x00003562 movs r0, r0                               |     
    0x00003564 ldr r2, [pc, 0x4c]                        |     
    0x00003566 cmp r0, 2                                 |     
    0x00003568 ldr r3, [pc, 0x4c]                        |     r3 = *(0x35b8);
    0x0000356a push {lr}                                 |     
    0x0000356c sub sp, 0xc                               |     
    0x0000356e add r2, pc                                |     r2 = 0x6b26;
    0x00003570 ldr r3, [r2, r3]                          |     
    0x00003572 ldr r3, [r3]                              |     r3 = *(0x6b26);
    0x00003574 str r3, [sp, 4]                           |     var_4h_3 = r3;
    0x00003576 mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 2) {
    0x0000357a beq 0x3580                                |         
    0x0000357c bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x00003580 ldr r0, [r1, 4]                           |     r0 = var_48h_6;
    0x00003582 bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003586 mov r1, sp                                |     r1 = sp;
    0x00003588 blx 0x1934                                |     r0 = keyctl_read_alloc ();
    0x0000358c subs r2, r0, 0                            |     r2 = r0 - 0;
                                                         |     if (r2 >= r0) {
    0x0000358e blt 0x35a4                                |         
                                                         |         if (r2 != r0) {
    0x00003590 beq 0x359e                                |             
    0x00003592 ldr r1, [sp]                              |             r1 = *(sp);
    0x00003594 movs r0, 1                                |             r0 = 1;
    0x00003596 blx 0x18c8                                |             r0 = write (r0, r1, r2);
    0x0000359a cmp r0, 0                                 |             
                                                         |             if (r0 < 0) {
    0x0000359c blt 0x35ac                                |                 goto label_19;
                                                         |             }
                                                         |         }
    0x0000359e movs r0, 0                                |         r0 = 0;
    0x000035a0 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x000035a4 ldr r0, [pc, 0x14]                        |     
    0x000035a6 add r0, pc                                |     r0 = 0x6b66;
    0x000035a8 bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_19:
    0x000035ac ldr r0, [pc, 0x10]                        |     
    0x000035ae add r0, pc                                |     r0 = 0x6b72;
    0x000035b0 bl 0x1e40                                 |     fcn_00001e40 ();
    0x000035b4 subs r1, 0x2e                             |     r1 -= 0x2e;
    0x000035b6 movs r0, r0                               |     
    0x000035b8 lsls r0, r0, 5                            |     r0 <<= 5;
    0x000035ba movs r0, r0                               |     
    0x000035bc asrs r6, r1, 4                            |     r6 = r1 >> 4;
    0x000035be movs r0, r0                               |     
    0x000035c0 asrs r2, r6, 0x13                         |     r2 = r6 >> 0x13;
    0x000035c2 movs r0, r0                               |     
    0x000035c4 ldr r2, [pc, 0x50]                        |     
    0x000035c6 cmp r0, 3                                 |     
    0x000035c8 ldr r3, [pc, 0x50]                        |     r3 = *(0x361c);
    0x000035ca push {lr}                                 |     
    0x000035cc sub sp, 0xc                               |     
    0x000035ce add r2, pc                                |     r2 = 0x6bea;
    0x000035d0 ldr r3, [r2, r3]                          |     
    0x000035d2 ldr r3, [r3]                              |     r3 = *(0x6bea);
    0x000035d4 str r3, [sp, 4]                           |     var_4h_4 = r3;
    0x000035d6 mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 3) {
    0x000035da beq 0x35e0                                |         
    0x000035dc bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x000035e0 mov r4, r1                                |     r4 = r1;
    0x000035e2 ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x000035e4 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x000035e8 mov r3, r0                                |     r3 = r0;
    0x000035ea ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x000035ec mov r4, r3                                |     r4 = r3;
    0x000035ee bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x000035f2 mov r5, r0                                |     r5 = r0;
    0x000035f4 mov r0, sp                                |     r0 = sp;
    0x000035f6 bl 0x2ccc                                 |     fcn_00002ccc (r0);
    0x000035fa ldr r2, [sp]                              |     r2 = *(sp);
    0x000035fc mov r1, r0                                |     r1 = r0;
    0x000035fe mov r3, r5                                |     r3 = r5;
    0x00003600 mov r0, r4                                |     r0 = r4;
    0x00003602 blx 0x1820                                |     r0 = keyctl_instantiate ();
    0x00003606 cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x00003608 blt 0x3610                                |         
    0x0000360a movs r0, 0                                |         r0 = 0;
    0x0000360c blx 0x1808                                |         exit (r0);
                                                         |     }
    0x00003610 ldr r0, [pc, 0xc]                         |     
    0x00003612 add r0, pc                                |     r0 = 0x6c36;
    0x00003614 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003616 invalid                                   |     
    0x0000361a movs r0, r0                               |     
    0x0000361c lsls r0, r0, 5                            |     r0 <<= 5;
    0x0000361e movs r0, r0                               |     
    0x00003620 asrs r6, r2, 0x12                         |     r6 = r2 >> 0x12;
    0x00003622 movs r0, r0                               |     
    0x00003624 cmp r0, 4                                 |     
    0x00003626 push {r3, lr}                             |     
                                                         |     if (r0 != 4) {
    0x00003628 beq 0x362e                                |         
    0x0000362a bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x0000362e mov r4, r1                                |     r4 = r1;
    0x00003630 ldr r0, [r1, 4]                           |     r0 = var_0h_3;
    0x00003632 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x00003636 mov r5, r0                                |     r5 = r0;
    0x00003638 ldr r0, [r4, 0xc]                         |     r0 = var_8h_4;
    0x0000363a bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x0000363e ldr r6, [r4, 8]                           |     r6 = s;
    0x00003640 mov r4, r0                                |     r4 = r0;
    0x00003642 mov r0, r6                                |     r0 = r6;
    0x00003644 blx 0x1844                                |     strlen (r0);
    0x00003648 mov r3, r4                                |     r3 = r4;
    0x0000364a mov r2, r0                                |     r2 = r0;
    0x0000364c mov r1, r6                                |     r1 = r6;
    0x0000364e mov r0, r5                                |     r0 = r5;
    0x00003650 blx 0x1820                                |     r0 = keyctl_instantiate ();
    0x00003654 cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x00003656 blt 0x365e                                |         
    0x00003658 movs r0, 0                                |         r0 = 0;
    0x0000365a blx 0x1808                                |         exit (r0);
                                                         |     }
    0x0000365e ldr r0, [pc, 8]                           |     
    0x00003660 add r0, pc                                |     r0 = 0x6cce;
    0x00003662 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003666 nop                                       |     
    0x00003668 asrs r0, r1, 0x11                         |     r0 = r1 >> 0x11;
    0x0000366a movs r0, r0                               |     
    0x0000366c ldr r2, [pc, 0x54]                        |     
    0x0000366e cmp r0, 4                                 |     
    0x00003670 ldr r3, [pc, 0x54]                        |     r3 = *(0x36c8);
    0x00003672 push {lr}                                 |     
    0x00003674 sub sp, 0x14                              |     
    0x00003676 add r2, pc                                |     r2 = 0x6d3e;
    0x00003678 ldr r3, [r2, r3]                          |     
    0x0000367a ldr r3, [r3]                              |     r3 = *(0x6d3e);
    0x0000367c str r3, [sp, 0xc]                         |     var_ch_4 = r3;
    0x0000367e mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 4) {
    0x00003682 beq 0x3688                                |         
    0x00003684 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x00003688 ldr r0, [r1, 0xc]                         |     r0 = *((r1 + 0xc));
    0x0000368a mov r4, r1                                |     r4 = r1;
    0x0000368c bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x00003690 mov r5, r0                                |     r5 = r0;
    0x00003692 add r0, sp, 8                             |     r0 += var_8h_4;
    0x00003694 bl 0x2ccc                                 |     fcn_00002ccc (r0);
    0x00003698 ldr r3, [sp, 8]                           |     r3 = var_8h_4;
    0x0000369a mov r2, r0                                |     r2 = r0;
    0x0000369c ldrd r0, r1, [r4, 4]                      |     __asm ("ldrd r0, r1, [r4, 4]");
    0x000036a0 str r5, [sp]                              |     *(sp) = r5;
    0x000036a2 blx 0x17a8                                |     r0 = add_key ();
    0x000036a6 subs r2, r0, 0                            |     r2 = r0 - 0;
                                                         |     if (r2 >= r0) {
    0x000036a8 blt 0x36ba                                |         
    0x000036aa ldr r1, [pc, 0x20]                        |         
    0x000036ac movs r0, 1                                |         r0 = 1;
    0x000036ae add r1, pc                                |         r1 = 0x6d80;
    0x000036b0 blx 0x18bc                                |         printf_chk ();
    0x000036b4 movs r0, 0                                |         r0 = 0;
    0x000036b6 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x000036ba ldr r0, [pc, 0x14]                        |     
    0x000036bc add r0, pc                                |     r0 = 0x6d92;
    0x000036be bl 0x1e40                                 |     fcn_00001e40 ();
    0x000036c2 nop                                       |     
    0x000036c4 subs r0, 0x26                             |     r0 -= 0x26;
    0x000036c6 movs r0, r0                               |     
    0x000036c8 lsls r0, r0, 5                            |     r0 <<= 5;
    0x000036ca movs r0, r0                               |     
    0x000036cc asrs r2, r3, 5                            |     r2 = r3 >> 5;
    0x000036ce movs r0, r0                               |     
    0x000036d0 asrs r0, r0, 0x10                         |     r0 >>= 0x10;
    0x000036d2 movs r0, r0                               |     
    0x000036d4 cmp r0, 3                                 |     
    0x000036d6 push {lr}                                 |     
    0x000036d8 sub sp, 0xc                               |     
                                                         |     if (r0 != 3) {
    0x000036da beq 0x36e0                                |         
    0x000036dc bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x000036e0 ldr r0, [r1, 8]                           |     r0 = *((r1 + 8));
    0x000036e2 mov r4, r1                                |     r4 = r1;
    0x000036e4 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x000036e8 mov r5, r0                                |     r5 = r0;
    0x000036ea ldr r0, [pc, 0x2c]                        |     
    0x000036ec movs r3, 0                                |     r3 = 0;
    0x000036ee ldr r1, [r4, 4]                           |     r1 = *((r4 + 4));
    0x000036f0 mov r2, r3                                |     r2 = r3;
    0x000036f2 str r5, [sp]                              |     *(sp) = r5;
    0x000036f4 add r0, pc                                |     r0 = 0x6e12;
    0x000036f6 blx 0x17a8                                |     r0 = add_key ();
    0x000036fa subs r2, r0, 0                            |     r2 = r0 - 0;
                                                         |     if (r2 >= r0) {
    0x000036fc blt 0x370e                                |         
    0x000036fe ldr r1, [pc, 0x1c]                        |         
    0x00003700 movs r0, 1                                |         r0 = 1;
    0x00003702 add r1, pc                                |         r1 = 0x6e24;
    0x00003704 blx 0x18bc                                |         printf_chk ();
    0x00003708 movs r0, 0                                |         r0 = 0;
    0x0000370a blx 0x1808                                |         exit (r0);
                                                         |     }
    0x0000370e ldr r0, [pc, 0x10]                        |     
    0x00003710 add r0, pc                                |     r0 = 0x6e36;
    0x00003712 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003716 nop                                       |     
    0x00003718 asrs r4, r6, 3                            |     r4 = r6 >> 3;
    0x0000371a movs r0, r0                               |     
    0x0000371c asrs r6, r0, 4                            |     r6 = r0 >> 4;
    0x0000371e movs r0, r0                               |     
    0x00003720 asrs r4, r5, 0xe                          |     r4 = r5 >> 0xe;
    0x00003722 movs r0, r0                               |     
    0x00003724 cmp r0, 5                                 |     
    0x00003726 push {lr}                                 |     
    0x00003728 sub sp, 0xc                               |     
                                                         |     if (r0 != 5) {
    0x0000372a beq 0x3730                                |         
    0x0000372c bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x00003730 mov r4, r1                                |     r4 = r1;
    0x00003732 ldr r0, [r1, 0x10]                        |     r0 = *((r1 + 0x10));
    0x00003734 bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003738 ldr r6, [r4, 0xc]                         |     r6 = *((r4 + 0xc));
    0x0000373a mov r5, r0                                |     r5 = r0;
    0x0000373c mov r0, r6                                |     r0 = r6;
    0x0000373e blx 0x1844                                |     strlen (r0);
    0x00003742 mov r2, r6                                |     r2 = r6;
    0x00003744 mov r3, r0                                |     r3 = r0;
    0x00003746 ldrd r0, r1, [r4, 4]                      |     __asm ("ldrd r0, r1, [r4, 4]");
    0x0000374a str r5, [sp]                              |     *(sp) = r5;
    0x0000374c blx 0x17a8                                |     r0 = add_key ();
    0x00003750 subs r2, r0, 0                            |     r2 = r0 - 0;
                                                         |     if (r2 >= r0) {
    0x00003752 blt 0x3764                                |         
    0x00003754 ldr r1, [pc, 0x14]                        |         
    0x00003756 movs r0, 1                                |         r0 = 1;
    0x00003758 add r1, pc                                |         r1 = 0x6ec8;
    0x0000375a blx 0x18bc                                |         printf_chk ();
    0x0000375e movs r0, 0                                |         r0 = 0;
    0x00003760 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x00003764 ldr r0, [pc, 8]                           |     
    0x00003766 add r0, pc                                |     r0 = 0x6eda;
    0x00003768 bl 0x1e40                                 |     fcn_00001e40 ();
    0x0000376c asrs r0, r6, 2                            |     r0 = r6 >> 2;
    0x0000376e movs r0, r0                               |     
    0x00003770 asrs r6, r2, 0xd                          |     r6 = r2 >> 0xd;
    0x00003772 movs r0, r0                               |     
    0x00003774 cmp r0, 1                                 |     
    0x00003776 push {r3, lr}                             |     
                                                         |     if (r0 != 1) {
    0x00003778 beq 0x377e                                |         
    0x0000377a bl 0x1b70                                 |         r0 = fcn_00001b70 ();
                                                         |     }
    0x0000377e mov r4, r0                                |     r4 = r0;
    0x00003780 movs r0, 0                                |     r0 = 0;
    0x00003782 blx 0x1958                                |     r0 = keyctl_join_session_keyring ();
    0x00003786 cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x00003788 blt 0x37b8                                |         
    0x0000378a blx 0x19b8                                |         r0 = keyctl_session_to_parent ();
    0x0000378e cmp r0, 0                                 |         
                                                         |         if (r0 >= 0) {
    0x00003790 blt 0x37b0                                |             
    0x00003792 movs r1, 0                                |             r1 = 0;
    0x00003794 mvn r0, 2                                 |             r0 = ~2;
    0x00003798 blx 0x1904                                |             r0 = keyctl_get_keyring_ID ();
    0x0000379c subs r2, r0, 0                            |             r2 = r0 - 0;
                                                         |             if (r2 < r0) {
    0x0000379e blt 0x37c0                                |                 goto label_20;
                                                         |             }
    0x000037a0 ldr r1, [pc, 0x24]                        |             
    0x000037a2 mov r0, r4                                |             r0 = r4;
    0x000037a4 add r1, pc                                |             r1 = 0x6f70;
    0x000037a6 blx 0x18bc                                |             printf_chk ();
    0x000037aa movs r0, 0                                |             r0 = 0;
    0x000037ac blx 0x1808                                |             exit (r0);
                                                         |         }
    0x000037b0 ldr r0, [pc, 0x18]                        |         
    0x000037b2 add r0, pc                                |         r0 = 0x6f82;
    0x000037b4 bl 0x1e40                                 |         fcn_00001e40 ();
                                                         |     }
    0x000037b8 ldr r0, [pc, 0x14]                        |     
    0x000037ba add r0, pc                                |     r0 = 0x6f8e;
    0x000037bc bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_20:
    0x000037c0 ldr r0, [pc, 0x10]                        |     
    0x000037c2 add r0, pc                                |     r0 = 0x6f9a;
    0x000037c4 bl 0x1e40                                 |     fcn_00001e40 ();
    0x000037c8 asrs r4, r4, 1                            |     r4 >>= 1;
    0x000037ca movs r0, r0                               |     
    0x000037cc asrs r2, r2, 0xc                          |     r2 >>= 0xc;
    0x000037ce movs r0, r0                               |     
    0x000037d0 asrs r2, r3, 0x20                         |     r2 = r3 >> 0x20;
    0x000037d2 movs r0, r0                               |     
    0x000037d4 asrs r6, r3, 0xc                          |     r6 = r3 >> 0xc;
    0x000037d6 movs r0, r0                               |     
    0x000037d8 ldr r2, [pc, 0x78]                        |     
    0x000037da cmp r0, 4                                 |     
    0x000037dc ldr r3, [pc, 0x78]                        |     r3 = *(0x3858);
    0x000037de push {r7, lr}                             |     
    0x000037e0 sub sp, 8                                 |     
    0x000037e2 add r2, pc                                |     r2 = 0x703a;
    0x000037e4 ldr r5, [pc, 0x74]                        |     
    0x000037e6 ldr r3, [r2, r3]                          |     
    0x000037e8 add r5, pc                                |     r5 = 0x7048;
    0x000037ea ldr r3, [r3]                              |     r3 = imp.__aeabi_unwind_cpp_pr0;
    0x000037ec str r3, [sp, 4]                           |     var_4h_5 = r3;
    0x000037ee mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 4) {
    0x000037f2 beq 0x37f8                                |         
    0x000037f4 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x000037f8 mov r4, r1                                |     r4 = r1;
    0x000037fa ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x000037fc bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003800 movs r2, 0xa                              |     r2 = 0xa;
    0x00003802 mov r1, sp                                |     r1 = sp;
    0x00003804 mov r6, r0                                |     r6 = r0;
    0x00003806 ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x00003808 blx 0x1838                                |     strtoul (r0, r1, r2);
    0x0000380c ldr r3, [sp]                              |     r3 = *(sp);
    0x0000380e mov r7, r0                                |     r7 = r0;
    0x00003810 ldrb.w r8, [r3]                           |     r8 = *(r3);
    0x00003814 cmp.w r8, 0                               |     
    0x00003816 lsrs r0, r0, 0x1c                         |     r0 >>= 0x1c;
                                                         |     if (r0 == r0) {
    0x00003818 bne 0x3834                                |         
    0x0000381a ldr r0, [r4, 0xc]                         |         r0 = *((r4 + 0xc));
    0x0000381c bl 0x1ca0                                 |         fcn_00001ca0 (r0);
    0x00003820 mov r1, r7                                |         r1 = r7;
    0x00003822 mov r2, r0                                |         r2 = r0;
    0x00003824 mov r0, r6                                |         r0 = r6;
    0x00003826 blx 0x16b8                                |         r0 = keyctl_negate ();
    0x0000382a cmp r0, 0                                 |         
                                                         |         if (r0 < 0) {
    0x0000382c blt 0x384c                                |             goto label_21;
                                                         |         }
    0x0000382e mov r0, r8                                |         r0 = r8;
    0x00003830 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x00003834 ldr r0, [pc, 0x28]                        |     
    0x00003836 movs r1, 1                                |     r1 = 1;
    0x00003838 ldr r2, [pc, 0x28]                        |     
    0x0000383a ldr r3, [r4, 8]                           |     r3 = *((r4 + 8));
    0x0000383c ldr r0, [r5, r0]                          |     r0 = *((r5 + r0));
    0x0000383e add r2, pc                                |     r2 = 0x70a6;
    0x00003840 ldr r0, [r0]                              |     r0 = *(0x3860);
    0x00003842 blx 0x18e0                                |     fprintf_chk ();
    0x00003846 movs r0, 2                                |     r0 = 2;
    0x00003848 blx 0x1808                                |     exit (r0);
                                                         | label_21:
    0x0000384c ldr r0, [pc, 0x18]                        |     
    0x0000384e add r0, pc                                |     r0 = 0x70ba;
    0x00003850 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003854 adds r6, 0xba                             |     r6 += 0xba;
    0x00003856 movs r0, r0                               |     
    0x00003858 lsls r0, r0, 5                            |     r0 <<= 5;
    0x0000385a movs r0, r0                               |     
    0x0000385c adds r6, 0xb4                             |     r6 += 0xb4;
    0x0000385e movs r0, r0                               |     
    0x00003860 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x00003862 movs r0, r0                               |     
    0x00003864 lsrs r2, r3, 0x15                         |     r2 = r3 >> 0x15;
    0x00003866 movs r0, r0                               |     
    0x00003868 asrs r2, r2, 1                            |     r2 >>= 1;
    0x0000386a movs r0, r0                               |     
    0x0000386c cmp r0, 4                                 |     
    0x0000386e mov r4, r0                                |     r4 = r0;
    0x00003870 mov r5, r1                                |     r5 = r1;
    0x00003872 push {r7, lr}                             |     
                                                         |     if (r0 > 4) {
    0x00003874 ble 0x388a                                |         
    0x00003876 ldr r0, [pc, 0x50]                        |         
    0x00003878 ldr r1, [r1, 4]                           |         r1 = *((r1 + 4));
    0x0000387a add r0, pc                                |         r0 = 0x7148;
    0x0000387c blx 0x1688                                |         r0 = strcmp (r0, r1);
                                                         |         if (r0 != 0) {
    0x00003880 cbnz r0, 0x3890                           |             goto label_22;
                                                         |         }
    0x00003882 subs r4, 1                                |         r4--;
    0x00003884 adds r5, 4                                |         r5 += 4;
    0x00003886 mov r6, r0                                |         r6 = r0;
    0x00003888 b 0x388c                                  |         
                                                         |     } else {
    0x0000388a movs r6, 1                                |         r6 = 1;
                                                         |     }
    0x0000388c cmp r4, 4                                 |     
                                                         |     if (r4 != 4) {
    0x0000388e beq 0x3894                                |         
                                                         | label_22:
    0x00003890 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x00003894 ldr r0, [r5, 4]                           |     r0 = *((r5 + 4));
    0x00003896 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x0000389a mov r4, r0                                |     r4 = r0;
    0x0000389c ldr r0, [r5, 8]                           |     r0 = *((r5 + 8));
    0x0000389e bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x000038a2 mov r7, r0                                |     r7 = r0;
    0x000038a4 ldr r0, [r5, 0xc]                         |     r0 = *((r5 + 0xc));
    0x000038a6 bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x000038aa mov r3, r6                                |     r3 = r6;
    0x000038ac mov r2, r0                                |     r2 = r0;
    0x000038ae mov r1, r7                                |     r1 = r7;
    0x000038b0 mov r0, r4                                |     r0 = r4;
    0x000038b2 blx 0x19ac                                |     r0 = keyctl_move ();
    0x000038b6 cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x000038b8 blt 0x38c0                                |         
    0x000038ba movs r0, 0                                |         r0 = 0;
    0x000038bc blx 0x1808                                |         exit (r0);
                                                         |     }
    0x000038c0 ldr r0, [pc, 8]                           |     
    0x000038c2 add r0, pc                                |     r0 = 0x7192;
    0x000038c4 bl 0x1e40                                 |     fcn_00001e40 ();
    0x000038c8 asrs r6, r7, 9                            |     r6 = r7 >> 9;
    0x000038ca movs r0, r0                               |     
    0x000038cc asrs r2, r7, 8                            |     r2 = r7 >> 8;
    0x000038ce movs r0, r0                               |     
    0x000038d0 cmp r0, 3                                 |     
    0x000038d2 push {r3, lr}                             |     
                                                         |     if (r0 != 3) {
    0x000038d4 beq 0x38da                                |         
    0x000038d6 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x000038da mov r4, r1                                |     r4 = r1;
    0x000038dc ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x000038de bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x000038e2 mov r5, r0                                |     r5 = r0;
    0x000038e4 ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x000038e6 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x000038ea mov r1, r0                                |     r1 = r0;
    0x000038ec mov r0, r5                                |     r0 = r5;
    0x000038ee blx 0x1658                                |     r0 = keyctl_link ();
    0x000038f2 cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x000038f4 blt 0x38fc                                |         
    0x000038f6 movs r0, 0                                |         r0 = 0;
    0x000038f8 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x000038fc ldr r0, [pc, 4]                           |     
    0x000038fe add r0, pc                                |     r0 = 0x7206;
    0x00003900 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003904 asrs r2, r1, 8                            |     r2 = r1 >> 8;
    0x00003906 movs r0, r0                               |     
    0x00003908 subs r3, r0, 2                            |     r3 = r0 - 2;
    0x0000390a mov r4, r0                                |     r4 = r0;
    0x0000390c ldr r0, [pc, 0x7c]                        |     
    0x0000390e cmp r3, 1                                 |     
    0x00003910 ldr r2, [pc, 0x7c]                        |     r2 = *(0x3990);
    0x00003912 push {r7, lr}                             |     
    0x00003914 sub sp, 8                                 |     
    0x00003916 add r0, pc                                |     r0 = 0x72a6;
    0x00003918 ldr r6, [pc, 0x78]                        |     
    0x0000391a ldr r2, [r0, r2]                          |     
    0x0000391c add r6, pc                                |     r6 = 0x72b4;
    0x0000391e ldr r2, [r2]                              |     r2 = imp.__aeabi_unwind_cpp_pr0;
    0x00003920 str r2, [sp, 4]                           |     var_4h_6 = r2;
    0x00003922 mov.w r2, 0                               |     r2 = 0;
                                                         |     if (r3 >= 1) {
    0x00003926 bls 0x392c                                |         
    0x00003928 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x0000392c ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x0000392e mov r5, r1                                |     r5 = r1;
    0x00003930 bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003934 cmp r4, 3                                 |     
    0x00003936 mov r7, r0                                |     r7 = r0;
                                                         |     if (r4 == 3) {
    0x00003938 beq 0x3960                                |         goto label_23;
                                                         |     }
    0x0000393a mov.w r0, -1                              |     r0 = -1;
                                                         |     do {
    0x0000393e mov r1, r7                                |         r1 = r7;
    0x00003940 blx 0x16d0                                |         r0 = keyctl_get_persistent ();
    0x00003944 subs r2, r0, 0                            |         r2 = r0 - 0;
                                                         |         if (r2 >= r0) {
    0x00003946 blt 0x3958                                |             
    0x00003948 ldr r1, [pc, 0x4c]                        |             
    0x0000394a movs r0, 1                                |             r0 = 1;
    0x0000394c add r1, pc                                |             r1 = 0x72e8;
    0x0000394e blx 0x18bc                                |             printf_chk ();
    0x00003952 movs r0, 0                                |             r0 = 0;
    0x00003954 blx 0x1808                                |             exit (r0);
                                                         |         }
    0x00003958 ldr r0, [pc, 0x40]                        |         
    0x0000395a add r0, pc                                |         r0 = 0x72fa;
    0x0000395c bl 0x1e40                                 |         fcn_00001e40 ();
                                                         | label_23:
    0x00003960 ldr r0, [r5, 8]                           |         r0 = *((r5 + 8));
    0x00003962 movs r2, 0                                |         r2 = 0;
    0x00003964 mov r1, sp                                |         r1 = sp;
    0x00003966 blx 0x1838                                |         strtoul (r0, r1, r2);
    0x0000396a ldr r3, [sp]                              |         r3 = *(sp);
    0x0000396c ldrb r3, [r3]                             |         r3 = *(r3);
    0x0000396e cmp r3, 0                                 |         
    0x00003970 beq 0x393e                                |         
                                                         |     } while (r3 == 0);
    0x00003972 ldr r0, [pc, 0x2c]                        |     
    0x00003974 movs r1, 1                                |     r1 = 1;
    0x00003976 ldr r2, [pc, 0x2c]                        |     
    0x00003978 ldr r3, [r5, 8]                           |     r3 = *((r5 + 8));
    0x0000397a ldr r0, [r6, r0]                          |     r0 = *((r6 + r0));
    0x0000397c add r2, pc                                |     r2 = 0x7326;
    0x0000397e ldr r0, [r0]                              |     r0 = *(0x39a2);
    0x00003980 blx 0x18e0                                |     fprintf_chk ();
    0x00003984 movs r0, 2                                |     r0 = 2;
    0x00003986 blx 0x1808                                |     exit (r0);
    0x0000398a nop                                       |     
    0x0000398c adds r5, 0x86                             |     r5 += 0x86;
    0x0000398e movs r0, r0                               |     
    0x00003990 lsls r0, r0, 5                            |     r0 <<= 5;
    0x00003992 movs r0, r0                               |     
    0x00003994 adds r5, 0x80                             |     r5 += 0x80;
    0x00003996 movs r0, r0                               |     
    0x00003998 lsrs r4, r7, 0x1a                         |     r4 = r7 >> 0x1a;
    0x0000399a movs r0, r0                               |     
    0x0000399c asrs r2, r2, 7                            |     r2 >>= 7;
    0x0000399e movs r0, r0                               |     
    0x000039a0 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x000039a2 movs r0, r0                               |     
    0x000039a4 asrs r0, r3, 6                            |     r0 = r3 >> 6;
    0x000039a6 movs r0, r0                               |     
    0x000039a8 cmp r0, 2                                 |     
    0x000039aa push {r3, lr}                             |     
                                                         |     if (r0 != 2) {
    0x000039ac beq 0x39b2                                |         
    0x000039ae bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x000039b2 ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x000039b4 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x000039b8 blx 0x1790                                |     r0 = keyctl_invalidate ();
    0x000039bc cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x000039be blt 0x39c6                                |         
    0x000039c0 movs r0, 0                                |         r0 = 0;
    0x000039c2 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x000039c6 ldr r0, [pc, 8]                           |     
    0x000039c8 add r0, pc                                |     r0 = 0x739e;
    0x000039ca bl 0x1e40                                 |     fcn_00001e40 ();
    0x000039ce nop                                       |     
    0x000039d0 asrs r4, r7, 5                            |     r4 = r7 >> 5;
    0x000039d2 movs r0, r0                               |     
    0x000039d4 ldr r2, [pc, 0x100]                       |     
    0x000039d6 cmp r0, 6                                 |     
    0x000039d8 ldr r3, [pc, 0x100]                       |     r3 = *(0x3adc);
    0x000039da push {r7, lr}                             |     
    0x000039dc sub sp, 0x18                              |     
    0x000039de add r2, pc                                |     r2 = 0x74ba;
    0x000039e0 ldr r6, [pc, 0xfc]                        |     
    0x000039e2 ldr r3, [r2, r3]                          |     
    0x000039e4 add r6, pc                                |     r6 = 0x74c8;
    0x000039e6 ldr r3, [r3]                              |     r3 = imp.__aeabi_unwind_cpp_pr0;
    0x000039e8 str r3, [sp, 0x14]                        |     var_14h = r3;
    0x000039ea mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 6) {
    0x000039ee beq 0x39f4                                |         
    0x000039f0 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x000039f4 mov r4, r1                                |     r4 = r1;
    0x000039f6 ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x000039f8 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x000039fc mov r8, r0                                |     r8 = r0;
    0x000039fe ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x00003a00 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x00003a04 mov sb, r0                                |     sb = r0;
    0x00003a06 ldr r0, [r4, 0xc]                         |     r0 = *((r4 + 0xc));
    0x00003a08 bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003a0c movs r1, 0                                |     r1 = 0;
    0x00003a0e mov sl, r0                                |     sl = r0;
    0x00003a10 movs r2, 0xa                              |     r2 = 0xa;
    0x00003a12 ldr r0, [r4, 0x10]                        |     r0 = *((r4 + 0x10));
    0x00003a14 blx 0x1838                                |     strtoul (r0, r1, r2);
    0x00003a16 invalid                                   |     
    0x00003a1a mov r5, r0                                |     r5 = r0;
                                                         |     if (r2 == 0xa) {
    0x00003a1c beq 0x3ac8                                |         goto label_24;
                                                         |     }
    0x00003a1e blx 0x17c0                                |     r0 = malloc (r0);
    0x00003a22 mov r7, r0                                |     r7 = r0;
    0x00003a24 cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00003a26 beq 0x3ad0                                |         goto label_25;
                                                         |     }
    0x00003a28 add r0, sp, 0x10                          |     r0 += var_10h;
    0x00003a2a bl 0x2ccc                                 |     fcn_00002ccc (r0);
    0x00003a2e str r5, [sp, 0xc]                         |     var_ch_6 = r5;
    0x00003a30 mov r2, sl                                |     r2 = sl;
    0x00003a32 str r0, [sp]                              |     *(sp) = r0;
    0x00003a34 mov r1, sb                                |     r1 = sb;
    0x00003a36 ldr r3, [r4, 0x14]                        |     r3 = *((r4 + 0x14));
    0x00003a38 mov r0, r8                                |     r0 = r8;
    0x00003a3a ldr r4, [sp, 0x10]                        |     r4 = var_10h;
    0x00003a3c str r7, [sp, 8]                           |     var_8h_6 = r7;
    0x00003a3e str r4, [sp, 4]                           |     var_4h_10 = r4;
    0x00003a40 blx 0x1670                                |     r0 = keyctl_dh_compute_kdf ();
    0x00003a44 subs r2, r0, 0                            |     r2 = r0 - 0;
                                                         |     if (r2 < r0) {
    0x00003a46 blt 0x3a90                                |         goto label_26;
                                                         |     }
    0x00003a48 ldr.w sb, [pc, 0x98]                      |     
    0x00003a4c mov r4, r2                                |     r4 = r2;
    0x00003a4e ldr r1, [pc, 0x98]                        |     
    0x00003a50 mov r5, r7                                |     r5 = r7;
    0x00003a52 add.w sl, r4, 1                           |     sl = r4 + 1;
    0x00003a56 mov.w r8, 0                               |     r8 = 0;
    0x00003a5a add sb, pc                                |     sb = 0x7542;
    0x00003a5c movs r0, 1                                |     r0 = 1;
    0x00003a5e add r1, pc                                |     r1 = 0x754c;
    0x00003a60 blx 0x18bc                                |     printf_chk ();
                                                         |     do {
    0x00003a64 ldrb r2, [r5]                             |         r2 = *(r5);
    0x00003a66 mov r1, sb                                |         r1 = sb;
    0x00003a68 movs r0, 1                                |         r0 = 1;
    0x00003a6a blx 0x18bc                                |         printf_chk ();
    0x00003a6e sub.w r3, sl, r4                          |         r3 = sl - r4;
    0x00003a72 strb.w r8, [r5]                           |         *(r5) = r8;
    0x00003a76 lsls r2, r3, 0x1b                         |         r2 = r3 << 0x1b;
                                                         |         if (r2 != r3) {
    0x00003a78 bne 0x3a98                                |             goto label_27;
                                                         |         }
    0x00003a7a subs r4, 1                                |         r4--;
    0x00003a7c cmp r4, 0                                 |         
                                                         |         if (r4 <= 0) {
    0x00003a7e ble 0x3ab6                                |             goto label_28;
                                                         |         }
    0x00003a80 movs r0, 0xa                              |         r0 = 0xa;
                                                         | label_1:
    0x00003a82 ldr r3, [pc, 0x68]                        |         r3 = *(0x3aee);
    0x00003a84 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x00003a86 ldr r1, [r3]                              |         r1 = *(0x3aee);
    0x00003a88 blx 0x194c                                |         putc (r0, r1);
                                                         | label_0:
    0x00003a8c adds r5, 1                                |         r5++;
    0x00003a8e b 0x3a64                                  |         
                                                         |     } while (1);
                                                         | label_26:
    0x00003a90 ldr r0, [pc, 0x5c]                        |     
    0x00003a92 add r0, pc                                |     r0 = 0x7586;
    0x00003a94 bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_27:
    0x00003a98 tst.w r3, 3                               |     
    0x00003a9c add.w r4, r4, -1                          |     r4 += -1;
    0x00003aa0 ite eq                                    |     
                                                         |     if ((r3 & 3) != 0) {
    0x00003aa2 moveq r3, 1                               |         r3 = 1;
                                                         |     }
                                                         |     if ((r3 & 3) == 0) {
    0x00003aa4 movne r3, 0                               |         r3 = 0;
                                                         |     }
    0x00003aa6 cmp r4, 0                                 |     
    0x00003aa8 lsl.w r3, r3, 5                           |     r3 <<= 5;
                                                         |     if (r4 <= 0) {
    0x00003aac ble 0x3ab6                                |         goto label_28;
                                                         |     }
    0x00003aae cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00003ab0 beq 0x3a8c                                |         goto label_0;
                                                         |     }
    0x00003ab2 movs r0, 0x20                             |     r0 = 0x20;
    0x00003ab4 b 0x3a82                                  |     goto label_1;
                                                         | label_28:
    0x00003ab6 movs r0, 0xa                              |     r0 = 0xa;
    0x00003ab8 blx 0x18b0                                |     putchar (r0);
    0x00003abc mov r0, r7                                |     r0 = r7;
    0x00003abe blx 0x16c4                                |     free (r0);
    0x00003ac2 movs r0, 0                                |     r0 = 0;
    0x00003ac4 blx 0x1808                                |     exit (r0);
                                                         | label_24:
    0x00003ac8 ldr r0, [pc, 0x28]                        |     
    0x00003aca add r0, pc                                |     r0 = 0x75c2;
    0x00003acc bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_25:
    0x00003ad0 ldr r0, [pc, 0x24]                        |     
    0x00003ad2 add r0, pc                                |     r0 = 0x75ce;
    0x00003ad4 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003ad8 adds r4, 0xbe                             |     r4 += 0xbe;
    0x00003ada movs r0, r0                               |     
    0x00003adc lsls r0, r0, 5                            |     r0 <<= 5;
    0x00003ade movs r0, r0                               |     
    0x00003ae0 adds r4, 0xb8                             |     r4 += 0xb8;
    0x00003ae2 movs r0, r0                               |     
    0x00003ae4 lsrs r2, r3, 0x1a                         |     r2 = r3 >> 0x1a;
    0x00003ae6 movs r0, r0                               |     
    0x00003ae8 asrs r2, r5, 5                            |     r2 = r5 >> 5;
    0x00003aea movs r0, r0                               |     
    0x00003aec lsls r0, r2, 5                            |     r0 = r2 << 5;
    0x00003aee movs r0, r0                               |     
    0x00003af0 asrs r6, r3, 4                            |     r6 = r3 >> 4;
    0x00003af2 movs r0, r0                               |     
    0x00003af4 asrs r6, r1, 2                            |     r6 = r1 >> 2;
    0x00003af6 movs r0, r0                               |     
    0x00003af8 asrs r2, r7, 2                            |     r2 = r7 >> 2;
    0x00003afa movs r0, r0                               |     
    0x00003afc ldr r6, [pc, 0xe8]                        |     
    0x00003afe cmp r0, 6                                 |     
    0x00003b00 push {r7, lr}                             |     
    0x00003b02 sub sp, 0x10                              |     
    0x00003b04 add r6, pc                                |     r6 = 0x76f0;
                                                         |     if (r0 != 6) {
    0x00003b06 beq 0x3b0c                                |         
    0x00003b08 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x00003b0c mov r4, r1                                |     r4 = r1;
    0x00003b0e ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x00003b10 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x00003b14 mov r7, r0                                |     r7 = r0;
    0x00003b16 ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x00003b18 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x00003b1c mov sb, r0                                |     sb = r0;
    0x00003b1e ldr r0, [r4, 0xc]                         |     r0 = *((r4 + 0xc));
    0x00003b20 bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003b24 movs r1, 0                                |     r1 = 0;
    0x00003b26 mov sl, r0                                |     sl = r0;
    0x00003b28 movs r2, 0xa                              |     r2 = 0xa;
    0x00003b2a ldr r0, [r4, 0x10]                        |     r0 = *((r4 + 0x10));
    0x00003b2c blx 0x1838                                |     r0 = strtoul (r0, r1, r2);
    0x00003b30 adds r1, r0, 1                            |     r1 = r0 + 1;
    0x00003b32 mov r5, r0                                |     r5 = r0;
                                                         |     if (r1 == r0) {
    0x00003b34 beq 0x3bd6                                |         goto label_29;
                                                         |     }
    0x00003b36 blx 0x17c0                                |     r0 = malloc (r0);
    0x00003b3a mov r8, r0                                |     r8 = r0;
    0x00003b3c cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00003b3e beq 0x3bde                                |         goto label_30;
                                                         |     }
    0x00003b40 mov r0, r7                                |     r0 = r7;
    0x00003b42 movs r7, 0                                |     r7 = 0;
    0x00003b44 mov r2, sl                                |     r2 = sl;
    0x00003b46 str r5, [sp, 0xc]                         |     var_ch_5 = r5;
    0x00003b48 mov r1, sb                                |     r1 = sb;
    0x00003b4a ldr r3, [r4, 0x14]                        |     r3 = *((r4 + 0x14));
    0x00003b4c str.w r8, [sp, 8]                         |     __asm ("str.w r8, [var_8h_5]");
    0x00003b50 strd r7, r7, [sp]                         |     __asm ("strd r7, r7, [sp]");
    0x00003b52 strb r0, [r0, 0x1c]                       |     *((r0 + 0x1c)) = r0;
    0x00003b54 blx 0x1670                                |     r0 = keyctl_dh_compute_kdf ();
    0x00003b58 subs r2, r0, 0                            |     r2 = r0 - 0;
                                                         |     if (r2 < r0) {
    0x00003b5a blt 0x3b9e                                |         goto label_31;
                                                         |     }
    0x00003b5c ldr.w sl, [pc, 0x8c]                      |     
    0x00003b60 mov r4, r2                                |     r4 = r2;
    0x00003b62 ldr r1, [pc, 0x8c]                        |     
    0x00003b64 mov r5, r8                                |     r5 = r8;
    0x00003b66 add.w sb, r4, 1                           |     sb = r4 + 1;
    0x00003b68 lsrs r1, r0, 4                            |     r1 = r0 >> 4;
    0x00003b6a movs r0, 1                                |     r0 = 1;
    0x00003b6c add sl, pc                                |     sl = 0x775c;
    0x00003b6e add r1, pc                                |     r1 = 0x7764;
    0x00003b70 blx 0x18bc                                |     printf_chk ();
                                                         |     do {
    0x00003b74 ldrb r2, [r5]                             |         r2 = *(r5);
    0x00003b76 mov r1, sl                                |         r1 = sl;
    0x00003b78 movs r0, 1                                |         r0 = 1;
    0x00003b7a blx 0x18bc                                |         printf_chk ();
    0x00003b7e sub.w r3, sb, r4                          |         r3 = sb - r4;
    0x00003b82 strb r7, [r5]                             |         *(r5) = r7;
    0x00003b84 lsls r2, r3, 0x1b                         |         r2 = r3 << 0x1b;
                                                         |         if (r2 != r3) {
    0x00003b86 bne 0x3ba6                                |             goto label_32;
                                                         |         }
    0x00003b88 subs r4, 1                                |         r4--;
    0x00003b8a cmp r4, 0                                 |         
                                                         |         if (r4 <= 0) {
    0x00003b8c ble 0x3bc4                                |             goto label_33;
                                                         |         }
    0x00003b8e movs r0, 0xa                              |         r0 = 0xa;
                                                         | label_3:
    0x00003b90 ldr r3, [pc, 0x60]                        |         r3 = *(0x3bf4);
    0x00003b92 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x00003b94 ldr r1, [r3]                              |         r1 = *(0x3bf4);
    0x00003b96 blx 0x194c                                |         putc (r0, r1);
                                                         | label_2:
    0x00003b9a adds r5, 1                                |         r5++;
    0x00003b9c b 0x3b74                                  |         
                                                         |     } while (1);
                                                         | label_31:
    0x00003b9e ldr r0, [pc, 0x58]                        |     
    0x00003ba0 add r0, pc                                |     r0 = 0x779e;
    0x00003ba2 bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_32:
    0x00003ba6 tst.w r3, 3                               |     
    0x00003baa add.w r4, r4, -1                          |     r4 += -1;
    0x00003bae ite eq                                    |     
                                                         |     if ((r3 & 3) != 0) {
    0x00003bb0 moveq r3, 1                               |         r3 = 1;
                                                         |     }
                                                         |     if ((r3 & 3) == 0) {
    0x00003bb2 movne r3, 0                               |         r3 = 0;
                                                         |     }
    0x00003bb4 cmp r4, 0                                 |     
    0x00003bb6 lsl.w r3, r3, 5                           |     r3 <<= 5;
                                                         |     if (r4 <= 0) {
    0x00003bba ble 0x3bc4                                |         goto label_33;
                                                         |     }
    0x00003bbc cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00003bbe beq 0x3b9a                                |         goto label_2;
                                                         |     }
    0x00003bc0 movs r0, 0x20                             |     r0 = 0x20;
    0x00003bc2 b 0x3b90                                  |     goto label_3;
                                                         | label_33:
    0x00003bc4 movs r0, 0xa                              |     r0 = 0xa;
    0x00003bc6 blx 0x18b0                                |     putchar (r0);
    0x00003bca mov r0, r8                                |     r0 = r8;
    0x00003bcc blx 0x16c4                                |     free (r0);
    0x00003bd0 movs r0, 0                                |     r0 = 0;
    0x00003bd2 blx 0x1808                                |     exit (r0);
                                                         | label_29:
    0x00003bd6 ldr r0, [pc, 0x24]                        |     
    0x00003bd8 add r0, pc                                |     r0 = 0x77da;
    0x00003bda bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_30:
    0x00003bde ldr r0, [pc, 0x20]                        |     
    0x00003be0 add r0, pc                                |     r0 = 0x77e6;
    0x00003be2 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003be6 nop                                       |     
    0x00003be8 adds r3, 0x98                             |     r3 += 0x98;
    0x00003bea movs r0, r0                               |     
    0x00003bec lsrs r0, r1, 0x16                         |     r0 = r1 >> 0x16;
    0x00003bee movs r0, r0                               |     
    0x00003bf0 asrs r2, r3, 1                            |     r2 = r3 >> 1;
    0x00003bf2 movs r0, r0                               |     
    0x00003bf4 lsls r0, r2, 5                            |     r0 = r2 << 5;
    0x00003bf6 movs r0, r0                               |     
    0x00003bf8 asrs r0, r2, 0x20                         |     r0 = r2 >> 0x20;
    0x00003bfa movs r0, r0                               |     
    0x00003bfc lsrs r0, r0, 0x1e                         |     r0 >>= 0x1e;
    0x00003bfe movs r0, r0                               |     
    0x00003c00 lsrs r4, r5, 0x1e                         |     r4 = r5 >> 0x1e;
    0x00003c02 movs r0, r0                               |     
    0x00003c04 ldr r2, [pc, 0xc4]                        |     
    0x00003c06 cmp r0, 4                                 |     
    0x00003c08 ldr r3, [pc, 0xc4]                        |     r3 = *(0x3cd0);
    0x00003c0a push {r7, lr}                             |     
    0x00003c0c sub sp, 8                                 |     
    0x00003c0e add r2, pc                                |     r2 = 0x78de;
    0x00003c10 ldr r6, [pc, 0xc0]                        |     
    0x00003c12 ldr r3, [r2, r3]                          |     
    0x00003c14 add r6, pc                                |     r6 = 0x78ec;
    0x00003c16 ldr r3, [r3]                              |     r3 = imp.__aeabi_unwind_cpp_pr0;
    0x00003c18 str r3, [sp, 4]                           |     var_4h_7 = r3;
    0x00003c1a mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 4) {
    0x00003c1e beq 0x3c24                                |         
    0x00003c20 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x00003c24 mov r4, r1                                |     r4 = r1;
    0x00003c26 ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x00003c28 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x00003c2c mov r5, r0                                |     r5 = r0;
    0x00003c2e ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x00003c30 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x00003c34 mov r1, r0                                |     r1 = r0;
    0x00003c36 ldr r0, [r4, 0xc]                         |     r0 = *((r4 + 0xc));
    0x00003c38 mov r4, r1                                |     r4 = r1;
    0x00003c3a bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003c3e mov r1, r4                                |     r1 = r4;
    0x00003c40 mov r2, r0                                |     r2 = r0;
    0x00003c42 mov r3, sp                                |     r3 = sp;
    0x00003c44 mov r0, r5                                |     r0 = r5;
    0x00003c46 blx 0x1874                                |     r0 = keyctl_dh_compute_alloc ();
    0x00003c4a subs r2, r0, 0                            |     r2 = r0 - 0;
                                                         |     if (r2 < r0) {
    0x00003c4c blt 0x3cc2                                |         goto label_34;
                                                         |     }
    0x00003c4e ldr r1, [pc, 0x88]                        |     
    0x00003c50 movs r0, 1                                |     r0 = 1;
    0x00003c52 ldr.w sb, [pc, 0x88]                      |     
    0x00003c56 mov r4, r2                                |     r4 = r2;
    0x00003c58 add.w r8, r4, 1                           |     r8 = r4 + 1;
    0x00003c5a lsrs r1, r0, 0x20                         |     r1 = r0 >> 0x20;
    0x00003c5c movs r7, 0                                |     r7 = 0;
    0x00003c5e add r1, pc                                |     r1 = 0x793c;
    0x00003c60 blx 0x18bc                                |     printf_chk ();
    0x00003c64 ldr r5, [sp]                              |     r5 = *(sp);
    0x00003c66 add sb, pc                                |     sb = 0x7948;
                                                         |     do {
    0x00003c68 ldrb r2, [r5]                             |         r2 = *(r5);
    0x00003c6a mov r1, sb                                |         r1 = sb;
    0x00003c6c movs r0, 1                                |         r0 = 1;
    0x00003c6e blx 0x18bc                                |         printf_chk ();
    0x00003c72 sub.w r3, r8, r4                          |         r3 = r8 - r4;
    0x00003c76 strb r7, [r5]                             |         *(r5) = r7;
    0x00003c78 lsls r2, r3, 0x1b                         |         r2 = r3 << 0x1b;
                                                         |         if (r2 != r3) {
    0x00003c7a bne 0x3c92                                |             goto label_35;
                                                         |         }
    0x00003c7c subs r4, 1                                |         r4--;
    0x00003c7e cmp r4, 0                                 |         
                                                         |         if (r4 <= 0) {
    0x00003c80 ble 0x3cb0                                |             goto label_36;
                                                         |         }
    0x00003c82 movs r0, 0xa                              |         r0 = 0xa;
                                                         | label_5:
    0x00003c84 ldr r3, [pc, 0x58]                        |         r3 = *(0x3ce0);
    0x00003c86 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x00003c88 ldr r1, [r3]                              |         r1 = *(0x3ce0);
    0x00003c8a blx 0x194c                                |         putc (r0, r1);
                                                         | label_4:
    0x00003c8e adds r5, 1                                |         r5++;
    0x00003c90 b 0x3c68                                  |         
                                                         |     } while (1);
                                                         | label_35:
    0x00003c92 tst.w r3, 3                               |     
    0x00003c96 add.w r4, r4, -1                          |     r4 += -1;
    0x00003c9a ite eq                                    |     
                                                         |     if ((r3 & 3) != 0) {
    0x00003c9c moveq r3, 1                               |         r3 = 1;
                                                         |     }
                                                         |     if ((r3 & 3) == 0) {
    0x00003c9e movne r3, 0                               |         r3 = 0;
                                                         |     }
    0x00003ca0 cmp r4, 0                                 |     
    0x00003ca2 lsl.w r3, r3, 5                           |     r3 <<= 5;
                                                         |     if (r4 <= 0) {
    0x00003ca6 ble 0x3cb0                                |         goto label_36;
                                                         |     }
    0x00003ca8 movs r0, 0x20                             |     r0 = 0x20;
    0x00003caa cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00003cac beq 0x3c8e                                |         goto label_4;
                                                         |     }
    0x00003cae b 0x3c84                                  |     goto label_5;
                                                         | label_36:
    0x00003cb0 movs r0, 0xa                              |     r0 = 0xa;
    0x00003cb2 blx 0x18b0                                |     putchar (r0);
    0x00003cb6 ldr r0, [sp]                              |     r0 = *(sp);
    0x00003cb8 blx 0x16c4                                |     free (r0);
    0x00003cbc movs r0, 0                                |     r0 = 0;
    0x00003cbe blx 0x1808                                |     exit (r0);
                                                         | label_34:
    0x00003cc2 ldr r0, [pc, 0x20]                        |     
    0x00003cc4 add r0, pc                                |     r0 = 0x79ae;
    0x00003cc6 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003cca nop                                       |     
    0x00003ccc adds r2, 0x8e                             |     r2 += 0x8e;
    0x00003cce movs r0, r0                               |     
    0x00003cd0 lsls r0, r0, 5                            |     r0 <<= 5;
    0x00003cd2 movs r0, r0                               |     
    0x00003cd4 adds r2, 0x88                             |     r2 += 0x88;
    0x00003cd6 movs r0, r0                               |     
    0x00003cd8 lsrs r2, r5, 0x1d                         |     r2 = r5 >> 0x1d;
    0x00003cda movs r0, r0                               |     
    0x00003cdc lsrs r6, r1, 0x12                         |     r6 = r1 >> 0x12;
    0x00003cde movs r0, r0                               |     
    0x00003ce0 lsls r0, r2, 5                            |     r0 = r2 << 5;
    0x00003ce2 movs r0, r0                               |     
    0x00003ce4 lsrs r4, r4, 0x1c                         |     r4 >>= 0x1c;
    0x00003ce6 movs r0, r0                               |     
    0x00003ce8 cmp r0, 2                                 |     
    0x00003cea push {r3, lr}                             |     
                                                         |     if (r0 != 2) {
    0x00003cec beq 0x3cf2                                |         
    0x00003cee bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x00003cf2 ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x00003cf4 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x00003cf8 blx 0x185c                                |     r0 = keyctl_clear ();
    0x00003cfc cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x00003cfe blt 0x3d06                                |         
    0x00003d00 movs r0, 0                                |         r0 = 0;
    0x00003d02 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x00003d06 ldr r0, [pc, 8]                           |     
    0x00003d08 add r0, pc                                |     r0 = 0x7a1e;
    0x00003d0a bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003d0e nop                                       |     
    0x00003d10 lsrs r0, r7, 0x1b                         |     r0 = r7 >> 0x1b;
    0x00003d12 movs r0, r0                               |     
    0x00003d14 ldr r2, [pc, 0x6c]                        |     
    0x00003d16 cmp r0, 3                                 |     
    0x00003d18 ldr r3, [pc, 0x6c]                        |     r3 = *(0x3d88);
    0x00003d1a push {r7, lr}                             |     
    0x00003d1c sub sp, 8                                 |     
    0x00003d1e add r2, pc                                |     r2 = 0x7aa6;
    0x00003d20 ldr r5, [pc, 0x68]                        |     
    0x00003d22 ldr r3, [r2, r3]                          |     
    0x00003d24 add r5, pc                                |     r5 = 0x7ab4;
    0x00003d26 ldr r3, [r3]                              |     r3 = imp.__aeabi_unwind_cpp_pr0;
    0x00003d28 str r3, [sp, 4]                           |     var_4h_8 = r3;
    0x00003d2a mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 3) {
    0x00003d2e beq 0x3d34                                |         
    0x00003d30 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x00003d34 mov r4, r1                                |     r4 = r1;
    0x00003d36 ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x00003d38 bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003d3c mov r1, sp                                |     r1 = sp;
    0x00003d3e movs r2, 0                                |     r2 = 0;
    0x00003d40 mov r6, r0                                |     r6 = r0;
    0x00003d42 ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x00003d44 blx 0x1838                                |     strtoul (r0, r1, r2);
    0x00003d48 ldr r3, [sp]                              |     r3 = *(sp);
    0x00003d4a mov r1, r0                                |     r1 = r0;
    0x00003d4c ldrb r7, [r3]                             |     r7 = *(r3);
                                                         |     if (r7 == 0) {
    0x00003d4e cbnz r7, 0x3d64                           |         
    0x00003d50 mov.w r2, -1                              |         r2 = -1;
    0x00003d54 mov r0, r6                                |         r0 = r6;
    0x00003d56 blx 0x182c                                |         r0 = keyctl_chown ();
    0x00003d5a cmp r0, 0                                 |         
                                                         |         if (r0 < 0) {
    0x00003d5c blt 0x3d7c                                |             goto label_37;
                                                         |         }
    0x00003d5e mov r0, r7                                |         r0 = r7;
    0x00003d60 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x00003d64 ldr r0, [pc, 0x28]                        |     
    0x00003d66 movs r1, 1                                |     r1 = 1;
    0x00003d68 ldr r2, [pc, 0x28]                        |     
    0x00003d6a ldr r3, [r4, 8]                           |     r3 = *((r4 + 8));
    0x00003d6c ldr r0, [r5, r0]                          |     r0 = *((r5 + r0));
    0x00003d6e add r2, pc                                |     r2 = 0x7b06;
    0x00003d70 ldr r0, [r0]                              |     r0 = *(0x3d90);
    0x00003d72 blx 0x18e0                                |     fprintf_chk ();
    0x00003d76 movs r0, 2                                |     r0 = 2;
    0x00003d78 blx 0x1808                                |     exit (r0);
                                                         | label_37:
    0x00003d7c ldr r0, [pc, 0x18]                        |     
    0x00003d7e add r0, pc                                |     r0 = 0x7b1a;
    0x00003d80 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003d84 adds r1, 0x7e                             |     r1 += 0x7e;
    0x00003d86 movs r0, r0                               |     
    0x00003d88 lsls r0, r0, 5                            |     r0 <<= 5;
    0x00003d8a movs r0, r0                               |     
    0x00003d8c adds r1, 0x78                             |     r1 += 0x78;
    0x00003d8e movs r0, r0                               |     
    0x00003d90 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x00003d92 movs r0, r0                               |     
    0x00003d94 lsrs r6, r4, 0x16                         |     r6 = r4 >> 0x16;
    0x00003d96 movs r0, r0                               |     
    0x00003d98 lsrs r2, r2, 0x1a                         |     r2 >>= 0x1a;
    0x00003d9a movs r0, r0                               |     
    0x00003d9c ldr r2, [pc, 0x6c]                        |     
    0x00003d9e cmp r0, 3                                 |     
    0x00003da0 ldr r3, [pc, 0x6c]                        |     r3 = *(0x3e10);
    0x00003da2 push {r7, lr}                             |     
    0x00003da4 sub sp, 8                                 |     
    0x00003da6 add r2, pc                                |     r2 = 0x7bb6;
    0x00003da8 ldr r5, [pc, 0x68]                        |     
    0x00003daa ldr r3, [r2, r3]                          |     
    0x00003dac add r5, pc                                |     r5 = 0x7bc4;
    0x00003dae ldr r3, [r3]                              |     r3 = imp.__aeabi_unwind_cpp_pr0;
    0x00003db0 str r3, [sp, 4]                           |     var_4h_9 = r3;
    0x00003db2 mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 3) {
    0x00003db6 beq 0x3dbc                                |         
    0x00003db8 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x00003dbc mov r4, r1                                |     r4 = r1;
    0x00003dbe ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x00003dc0 bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003dc4 movs r2, 0                                |     r2 = 0;
    0x00003dc6 mov r1, sp                                |     r1 = sp;
    0x00003dc8 mov r6, r0                                |     r6 = r0;
    0x00003dca ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x00003dcc blx 0x1838                                |     strtoul (r0, r1, r2);
    0x00003dd0 ldr r3, [sp]                              |     r3 = *(sp);
    0x00003dd2 mov r2, r0                                |     r2 = r0;
    0x00003dd4 ldrb r7, [r3]                             |     r7 = *(r3);
                                                         |     if (r7 == 0) {
    0x00003dd6 cbnz r7, 0x3dec                           |         
    0x00003dd8 mov.w r1, -1                              |         r1 = -1;
    0x00003ddc mov r0, r6                                |         r0 = r6;
    0x00003dde blx 0x182c                                |         r0 = keyctl_chown ();
    0x00003de2 cmp r0, 0                                 |         
                                                         |         if (r0 < 0) {
    0x00003de4 blt 0x3e04                                |             goto label_38;
                                                         |         }
    0x00003de6 mov r0, r7                                |         r0 = r7;
    0x00003de8 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x00003dec ldr r0, [pc, 0x28]                        |     
    0x00003dee movs r1, 1                                |     r1 = 1;
    0x00003df0 ldr r2, [pc, 0x28]                        |     
    0x00003df2 ldr r3, [r4, 8]                           |     r3 = *((r4 + 8));
    0x00003df4 ldr r0, [r5, r0]                          |     r0 = *((r5 + r0));
    0x00003df6 add r2, pc                                |     r2 = 0x7c16;
    0x00003df8 ldr r0, [r0]                              |     r0 = *(0x3e18);
    0x00003dfa blx 0x18e0                                |     fprintf_chk ();
    0x00003dfe movs r0, 2                                |     r0 = 2;
    0x00003e00 blx 0x1808                                |     exit (r0);
                                                         | label_38:
    0x00003e04 ldr r0, [pc, 0x18]                        |     
    0x00003e06 add r0, pc                                |     r0 = 0x7c2a;
    0x00003e08 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003e0c adds r0, 0xf6                             |     r0 += 0xf6;
    0x00003e0e movs r0, r0                               |     
    0x00003e10 lsls r0, r0, 5                            |     r0 <<= 5;
    0x00003e12 movs r0, r0                               |     
    0x00003e14 adds r0, 0xf0                             |     r0 += 0xf0;
    0x00003e16 movs r0, r0                               |     
    0x00003e18 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x00003e1a movs r0, r0                               |     
    0x00003e1c lsrs r2, r5, 0x18                         |     r2 = r5 >> 0x18;
    0x00003e1e movs r0, r0                               |     
    0x00003e20 lsrs r2, r1, 0x18                         |     r2 = r1 >> 0x18;
    0x00003e22 movs r0, r0                               |     
    0x00003e24 push {r3, lr}                             |     
    0x00003e26 ldr r3, [sp, 8]                           |     r3 = var_0h_9;
    0x00003e28 ldr r3, [r3]                              |     r3 = *(r3);
    0x00003e2a cmp r3, r1                                |     
    0x00003e2c it ne                                     |     
                                                         |     if (r3 == r1) {
    0x00003e2e movne r0, 0                               |         r0 = 0;
                                                         |     }
                                                         |     if (r3 != r1) {
    0x00003e30 beq 0x3e34                                |         
    0x00003e32 pop {r3, pc}                              |         
                                                         |     }
    0x00003e34 mov r1, r0                                |     r1 = r0;
    0x00003e36 mov r0, r3                                |     r0 = r3;
    0x00003e38 blx 0x1784                                |     r0 = keyctl_unlink ();
    0x00003e3c mvns r0, r0                               |     r0 = ~r0;
    0x00003e3e lsrs r0, r0, 0x1f                         |     r0 >>= 0x1f;
    0x00003e40 pop {r3, pc}                              |     
                                                         | }

[*] Function sprintf used 1 times keyctl