• Arvind Sankar's avatar
    x86/boot/compressed/64: Use 32-bit (zero-extended) MOV for z_output_len · a86255fe
    Arvind Sankar authored
    z_output_len is the size of the decompressed payload (i.e. vmlinux +
    vmlinux.relocs) and is generated as an unsigned 32-bit quantity by
    mkpiggy.c.
    
    The current
    
      movq $z_output_len, %r9
    
    instruction generates a sign-extended move to %r9. Using
    
      movl $z_output_len, %r9d
    
    will instead zero-extend into %r9, which is appropriate for an unsigned
    32-bit quantity. This is also what is already done for z_input_len, the
    size of the compressed payload.
    
    [ bp:
    
      Also, z_output_len cannot be a 64-bit quantity because it participates
      in:
    
      init_size:              .long INIT_SIZE         # kernel initialization size
    
      through INIT_SIZE which is a 32-bit quantity determined by the .long
      directive (vs .quad for 64-bit). Furthermore, if it really must be a
      64-bit quantity, then the insn must be MOVABS which can accommodate a
      64-bit immediate and which the toolchain does not generate automatically.
    ]
    Signed-off-by: default avatarArvind Sankar <nivedita@alum.mit.edu>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Link: https://lkml.kernel.org/r/20200211173333.1722739-1-nivedita@alum.mit.edu
    a86255fe
head_64.S 15.7 KB