diff options
-rw-r--r-- | mm/mempolicy.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 143b019e9834..3c8ee31572ec 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c | |||
@@ -1965,6 +1965,11 @@ static inline int mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol) | |||
1965 | unsigned short mode; | 1965 | unsigned short mode; |
1966 | unsigned short flags = pol ? pol->flags : 0; | 1966 | unsigned short flags = pol ? pol->flags : 0; |
1967 | 1967 | ||
1968 | /* | ||
1969 | * Sanity check: room for longest mode, flag and some nodes | ||
1970 | */ | ||
1971 | VM_BUG_ON(maxlen < strlen("interleave") + strlen("relative") + 16); | ||
1972 | |||
1968 | if (!pol || pol == &default_policy) | 1973 | if (!pol || pol == &default_policy) |
1969 | mode = MPOL_DEFAULT; | 1974 | mode = MPOL_DEFAULT; |
1970 | else | 1975 | else |
@@ -1991,7 +1996,6 @@ static inline int mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol) | |||
1991 | 1996 | ||
1992 | default: | 1997 | default: |
1993 | BUG(); | 1998 | BUG(); |
1994 | return -EFAULT; | ||
1995 | } | 1999 | } |
1996 | 2000 | ||
1997 | l = strlen(policy_types[mode]); | 2001 | l = strlen(policy_types[mode]); |
@@ -2002,16 +2006,17 @@ static inline int mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol) | |||
2002 | p += l; | 2006 | p += l; |
2003 | 2007 | ||
2004 | if (flags & MPOL_MODE_FLAGS) { | 2008 | if (flags & MPOL_MODE_FLAGS) { |
2005 | int need_bar = 0; | ||
2006 | |||
2007 | if (buffer + maxlen < p + 2) | 2009 | if (buffer + maxlen < p + 2) |
2008 | return -ENOSPC; | 2010 | return -ENOSPC; |
2009 | *p++ = '='; | 2011 | *p++ = '='; |
2010 | 2012 | ||
2013 | /* | ||
2014 | * Currently, the only defined flags are mutually exclusive | ||
2015 | */ | ||
2011 | if (flags & MPOL_F_STATIC_NODES) | 2016 | if (flags & MPOL_F_STATIC_NODES) |
2012 | p += sprintf(p, "%sstatic", need_bar++ ? "|" : ""); | 2017 | p += snprintf(p, buffer + maxlen - p, "static"); |
2013 | if (flags & MPOL_F_RELATIVE_NODES) | 2018 | else if (flags & MPOL_F_RELATIVE_NODES) |
2014 | p += sprintf(p, "%srelative", need_bar++ ? "|" : ""); | 2019 | p += snprintf(p, buffer + maxlen - p, "relative"); |
2015 | } | 2020 | } |
2016 | 2021 | ||
2017 | if (!nodes_empty(nodes)) { | 2022 | if (!nodes_empty(nodes)) { |