binfmt_flat: flat_{get,put}_addr_from_rp() should be able to fail
on MMU targets EFAULT is possible here. Make both return 0 or error, passing what used to be the return value of flat_get_addr_from_rp() by reference. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@ -17,11 +17,6 @@
|
||||
#define flat_set_persistent(relval, p) 0
|
||||
#define flat_reloc_valid(reloc, size) \
|
||||
(((reloc) - textlen_for_m32r_lo16_data) <= (size))
|
||||
#define flat_get_addr_from_rp(rp, relval, flags, persistent) \
|
||||
m32r_flat_get_addr_from_rp(rp, relval, (text_len) )
|
||||
|
||||
#define flat_put_addr_at_rp(rp, addr, relval) \
|
||||
m32r_flat_put_addr_at_rp(rp, addr, relval)
|
||||
|
||||
/* Convert a relocation entry into an address. */
|
||||
static inline unsigned long
|
||||
@ -57,9 +52,9 @@ flat_get_relocate_addr (unsigned long relval)
|
||||
|
||||
static unsigned long textlen_for_m32r_lo16_data = 0;
|
||||
|
||||
static inline unsigned long m32r_flat_get_addr_from_rp (unsigned long *rp,
|
||||
unsigned long relval,
|
||||
unsigned long textlen)
|
||||
static inline unsigned long m32r_flat_get_addr_from_rp (u32 *rp,
|
||||
u32 relval,
|
||||
u32 textlen)
|
||||
{
|
||||
unsigned int reloc = flat_m32r_get_reloc_type (relval);
|
||||
textlen_for_m32r_lo16_data = 0;
|
||||
@ -100,9 +95,7 @@ static inline unsigned long m32r_flat_get_addr_from_rp (unsigned long *rp,
|
||||
return ~0; /* bogus value */
|
||||
}
|
||||
|
||||
static inline void m32r_flat_put_addr_at_rp (unsigned long *rp,
|
||||
unsigned long addr,
|
||||
unsigned long relval)
|
||||
static inline void flat_put_addr_at_rp(u32 *rp, u32 addr, u32 relval)
|
||||
{
|
||||
unsigned int reloc = flat_m32r_get_reloc_type (relval);
|
||||
if (reloc & 0xf0) {
|
||||
@ -142,4 +135,8 @@ static inline void m32r_flat_put_addr_at_rp (unsigned long *rp,
|
||||
}
|
||||
}
|
||||
|
||||
// kludge - text_len is a local variable in the only user.
|
||||
#define flat_get_addr_from_rp(rp, relval, flags, addr, persistent) \
|
||||
(m32r_flat_get_addr_from_rp(rp, relval, text_len), 0)
|
||||
|
||||
#endif /* __ASM_M32R_FLAT_H */
|
||||
|
Reference in New Issue
Block a user