|
@@ -7083,14 +7083,15 @@ static int sctp_getsockopt_pr_assocstatus(struct sock *sk, int len,
|
|
|
}
|
|
|
|
|
|
policy = params.sprstat_policy;
|
|
|
- if (!policy || (policy & ~(SCTP_PR_SCTP_MASK | SCTP_PR_SCTP_ALL)))
|
|
|
+ if (!policy || (policy & ~(SCTP_PR_SCTP_MASK | SCTP_PR_SCTP_ALL)) ||
|
|
|
+ ((policy & SCTP_PR_SCTP_ALL) && (policy & SCTP_PR_SCTP_MASK)))
|
|
|
goto out;
|
|
|
|
|
|
asoc = sctp_id2assoc(sk, params.sprstat_assoc_id);
|
|
|
if (!asoc)
|
|
|
goto out;
|
|
|
|
|
|
- if (policy & SCTP_PR_SCTP_ALL) {
|
|
|
+ if (policy == SCTP_PR_SCTP_ALL) {
|
|
|
params.sprstat_abandoned_unsent = 0;
|
|
|
params.sprstat_abandoned_sent = 0;
|
|
|
for (policy = 0; policy <= SCTP_PR_INDEX(MAX); policy++) {
|
|
@@ -7142,7 +7143,8 @@ static int sctp_getsockopt_pr_streamstatus(struct sock *sk, int len,
|
|
|
}
|
|
|
|
|
|
policy = params.sprstat_policy;
|
|
|
- if (!policy || (policy & ~(SCTP_PR_SCTP_MASK | SCTP_PR_SCTP_ALL)))
|
|
|
+ if (!policy || (policy & ~(SCTP_PR_SCTP_MASK | SCTP_PR_SCTP_ALL)) ||
|
|
|
+ ((policy & SCTP_PR_SCTP_ALL) && (policy & SCTP_PR_SCTP_MASK)))
|
|
|
goto out;
|
|
|
|
|
|
asoc = sctp_id2assoc(sk, params.sprstat_assoc_id);
|