73 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
 | 
						|
#include "syslib.h"
 | 
						|
 | 
						|
#include <minix/safecopies.h>
 | 
						|
 | 
						|
/*===========================================================================*
 | 
						|
 *				sys_safemap				     *
 | 
						|
 *===========================================================================*/
 | 
						|
PUBLIC int sys_safemap(endpoint_t grantor, cp_grant_id_t grant,
 | 
						|
	vir_bytes grant_offset, vir_bytes my_address,
 | 
						|
	size_t bytes, int my_seg, int writable)
 | 
						|
{
 | 
						|
/* Map a block of data for which the other process has previously
 | 
						|
 * granted permission. 
 | 
						|
 */
 | 
						|
 | 
						|
	message copy_mess;
 | 
						|
 | 
						|
	copy_mess.SMAP_EP = grantor;
 | 
						|
	copy_mess.SMAP_GID = grant;
 | 
						|
	copy_mess.SMAP_OFFSET = grant_offset;
 | 
						|
	copy_mess.SMAP_SEG = (void*) my_seg;
 | 
						|
	copy_mess.SMAP_ADDRESS = my_address;
 | 
						|
	copy_mess.SMAP_BYTES = bytes;
 | 
						|
	copy_mess.SMAP_FLAG = writable;
 | 
						|
 | 
						|
	return(_kernel_call(SYS_SAFEMAP, ©_mess));
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/*===========================================================================*
 | 
						|
 *			     sys_saferevmap_gid				     *
 | 
						|
 *===========================================================================*/
 | 
						|
PUBLIC int sys_saferevmap_gid(cp_grant_id_t grant)
 | 
						|
{
 | 
						|
/* Grantor revokes safemap by grant id. */
 | 
						|
	message copy_mess;
 | 
						|
 | 
						|
	copy_mess.SMAP_FLAG = 1;
 | 
						|
	copy_mess.SMAP_GID = grant;
 | 
						|
 | 
						|
	return(_kernel_call(SYS_SAFEREVMAP, ©_mess));
 | 
						|
}
 | 
						|
 | 
						|
/*===========================================================================*
 | 
						|
 *			    sys_saferevmap_addr				     *
 | 
						|
 *===========================================================================*/
 | 
						|
PUBLIC int sys_saferevmap_addr(vir_bytes addr)
 | 
						|
{
 | 
						|
/* Grantor revokes safemap by address. */
 | 
						|
	message copy_mess;
 | 
						|
 | 
						|
	copy_mess.SMAP_FLAG = 0;
 | 
						|
	copy_mess.SMAP_GID = addr;
 | 
						|
 | 
						|
	return(_kernel_call(SYS_SAFEREVMAP, ©_mess));
 | 
						|
}
 | 
						|
 | 
						|
/*===========================================================================*
 | 
						|
 *				sys_safeunmap				     *
 | 
						|
 *===========================================================================*/
 | 
						|
PUBLIC int sys_safeunmap(int my_seg, vir_bytes my_address)
 | 
						|
{
 | 
						|
/* Requestor unmaps safemap. */
 | 
						|
	message copy_mess;
 | 
						|
 | 
						|
	copy_mess.SMAP_SEG = (void*) my_seg;
 | 
						|
	copy_mess.SMAP_ADDRESS = my_address;
 | 
						|
 | 
						|
	return(_kernel_call(SYS_SAFEUNMAP, ©_mess));
 | 
						|
}
 | 
						|
 |