hyperledger/fabric · error
permission denied
Error message
permission denied
What it means
SigFilter.Apply policy evaluation result: the message's signatures did not satisfy the channel policy (normally Writers; in maintenance mode the orderer Writers policy). The submitter is not authorized to send this message to the channel — this is an authorization failure, not a malformed message.
Source
Thrown at orderer/common/msgprocessor/sigfilter.go:77
}
// In maintenance mode, we typically require the signature of /Channel/Orderer/Writers.
// This will filter out configuration changes that are not related to consensus-type migration
// (e.g on /Channel/Application), and will block Deliver requests from peers (which are normally /Channel/Readers).
policyName := sf.normalPolicyName
if ordererConf.ConsensusState() == orderer.ConsensusType_STATE_MAINTENANCE {
policyName = sf.maintenancePolicyName
}
policy, ok := sf.support.PolicyManager().GetPolicy(policyName)
if !ok {
return fmt.Errorf("could not find policy %s", policyName)
}
err = policy.EvaluateSignedData(signedData)
if err != nil {
logger.Warnw("SigFilter evaluation failed", "error", err.Error(), "ConsensusState", ordererConf.ConsensusState(), "policyName", policyName, "signingIdentity", protoutil.LogMessageForSerializedIdentities(signedData))
return errors.Wrap(errors.WithStack(ErrPermissionDenied), err.Error())
}
return nil
}
View on GitHub (pinned to 2736b63f8f)
Solutions
- Submit the message from an identity that satisfies the channel's Writers policy
- Update the channel policy to authorize the submitter's organization
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at orderer/common/msgprocessor/sigfilter.go:77 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of hyperledger/fabric@2736b63f8f (2026-09-04).
Data as JSON: /api/errors/c914fde117a1a448.
Report an issue: GitHub.