X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=Kernel%2Flib.c;h=73b6432e00b616f56f44ce84148fbd1ef7e921b3;hb=066ea7cb8cd5c873734405d0b713cb330c79ed49;hp=472351cb164bb7f75caeec92de019be2619cce62;hpb=f830c3b9bc88e968d34ea935e2125674d3a504b0;p=tpg%2Facess2.git diff --git a/Kernel/lib.c b/Kernel/lib.c index 472351cb..73b6432e 100644 --- a/Kernel/lib.c +++ b/Kernel/lib.c @@ -854,10 +854,14 @@ int CheckString(const char *String) /** * \brief Check if a sized memory region is valid memory + * \return Boolean success */ int CheckMem(const void *Mem, int NumBytes) { tVAddr addr = (tVAddr)Mem; + + if( !MM_GetPhysAddr( addr ) ) + return 0; if( MM_IsUser( addr ) ) { @@ -956,12 +960,19 @@ void *memmove(void *__dest, const void *__src, size_t len) char *dest = __dest; const char *src = __src; void *ret = __dest; + + if( len == 0 || dest == src ) + return dest; if( (tVAddr)dest > (tVAddr)src + len ) return memcpy(dest, src, len); if( (tVAddr)dest + len < (tVAddr)src ) return memcpy(dest, src, len); + // NOTE: Assumes memcpy works forward + if( (tVAddr)dest < (tVAddr)src ) + return memcpy(dest, src, len); + if( (tVAddr)dest < (tVAddr)src ) block_size = (tVAddr)src - (tVAddr)dest; else