cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

stub_32.S (918B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#include <as-layout.h>
      3
      4.section .__syscall_stub, "ax"
      5
      6	.globl batch_syscall_stub
      7batch_syscall_stub:
      8	/* %esp comes in as "top of page" */
      9	mov %esp, %ecx
     10	/* %esp has pointer to first operation */
     11	add $8, %esp
     12again:
     13	/* load length of additional data */
     14	mov	0x0(%esp), %eax
     15
     16	/* if(length == 0) : end of list */
     17	/* write possible 0 to header */
     18	mov	%eax, 0x4(%ecx)
     19	cmpl	$0, %eax
     20	jz	done
     21
     22	/* save current pointer */
     23	mov	%esp, 0x4(%ecx)
     24
     25	/* skip additional data */
     26	add	%eax, %esp
     27
     28	/* load syscall-# */
     29	pop	%eax
     30
     31	/* load syscall params */
     32	pop	%ebx
     33	pop	%ecx
     34	pop	%edx
     35	pop	%esi
     36 	pop	%edi
     37	pop	%ebp
     38
     39	/* execute syscall */
     40	int	$0x80
     41
     42	/* restore top of page pointer in %ecx */
     43	mov	%esp, %ecx
     44	andl	$(~UM_KERN_PAGE_SIZE) + 1, %ecx
     45
     46	/* check return value */
     47	pop	%ebx
     48	cmp	%ebx, %eax
     49	je	again
     50
     51done:
     52	/* save return value */
     53	mov	%eax, (%ecx)
     54
     55	/* stop */
     56	int3