 c51cd5fe91
			
		
	
	
		c51cd5fe91
		
	
	
	
	
		
			
			Before safecopies, the IO_ENDPT and DL_ENDPT message fields were needed to know which actual process to copy data from/to, as that process may not always be the caller. Now that we have full safecopy support, these fields have become useless for that purpose: the owner of the grant is *always* the caller. Allowing the caller to supply another endpoint is in fact dangerous, because the callee may then end up using a grant from a third party. One could call this a variant of the confused deputy problem. From now on, safecopy calls should always use the caller's endpoint as grant owner. This fully obsoletes the DL_ENDPT field in the inet/ethernet protocol. IO_ENDPT has other uses besides identifying the grant owner though. This patch renames IO_ENDPT to USER_ENDPT, not only because that is a more fitting name (it should never be used for I/O after all), but also in order to intentionally break any old system source code outside the base system. If this patch breaks your code, fixing it is fairly simple: - DL_ENDPT should be replaced with m_source; - IO_ENDPT should be replaced with m_source when used for safecopies; - IO_ENDPT should be replaced with USER_ENDPT for any other use, e.g. when setting REP_ENDPT, matching requests in CANCEL calls, getting DEV_SELECT flags, and retrieving of the real user process's endpoint in DEV_OPEN. The changes in this patch are binary backward compatible.
		
			
				
	
	
		
			15 lines
		
	
	
		
			440 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			15 lines
		
	
	
		
			440 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "syslib.h"
 | |
| 
 | |
| /*===========================================================================*
 | |
|  *                               sys_enable_iop				     *    
 | |
|  *===========================================================================*/
 | |
| PUBLIC int sys_enable_iop(proc_ep)
 | |
| endpoint_t proc_ep;			/* number of process to allow I/O */
 | |
| {
 | |
|     message m_iop;
 | |
|     m_iop.IOP_ENDPT = proc_ep;
 | |
|     return _kernel_call(SYS_IOPENABLE, &m_iop);
 | |
| }
 | |
| 
 | |
| 
 |