aboutsummaryrefslogtreecommitdiffstats
path: root/mm/mempolicy.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/mempolicy.c')
-rw-r--r--mm/mempolicy.c17
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)) {